首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

线程间操作无效,大伙帮忙来看看吧

2013-11-04 
线程间操作无效,大家帮忙来看看吧!public delegate void WeiTuoXmlNode(XmlNode s ) //定义委托private

线程间操作无效,大家帮忙来看看吧!


public delegate void WeiTuo<XmlNode>(XmlNode s ); //定义委托
private  WeiTuo<XmlNode> weituo;         //定义委托

private void frmMain_Load(object sender, EventArgs e)
        {
            EQ2008Config.GetSection();
            string strpath = AppDomain.CurrentDomain.BaseDirectory + "\\StationConfig.xml";
            XmlDocument doc = new XmlDocument();//初始化一个xml实例
            doc.Load(strpath);//导入指定的xml文件
            XmlNode no = doc.SelectSingleNode("StationList");//指定一个节点
            XmlNodeList listnode = no.SelectNodes("StationData");//获取同名同级别"stationdata"节点集合
            ti = new TimerCallback(ShowDataToScreenStation);
            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            foreach (XmlNode node in listnode)//遍历所有的stationdata节点
            {
                weituo = new WeiTuo<XmlNode>(Set_labelText);
                StartThread(node);
               
            }
}
public void Set_labelText(XmlNode strText) 
        {
            
            StationData stationData = new StationData(strText);
            //stationData.IsShow = false;
            Program.listStationList.Add(stationData);
            this.flowLayoutPanel1.BackColor = Color.Orange;
            Label lab = new Label();//实例一个label显示
           
            lab.Name = "lab" + stationData.CardFlagID.ToString();
            lab.AutoSize = false;
            lab.Size = new Size(280, 140);
            lab.BorderStyle = BorderStyle.Fixed3D;
            lab.Text = stationData.StatinName;
            lab.Font = new Font("宋体", 11);

            if (stationData.IsShow)
            {
                lab.BackColor = Color.Green;
            }
            if (stationData.IsShow)
            {
                System.Threading.Timer tim = new System.Threading.Timer(ti, stationData.CardFlagID, 0, 10000);
                //超过0秒后,以及此后每隔10秒间隔,都会调用一次由TimerCallback(ShowDataToScreenStation)指定的委托。
                dicThread.Add(stationData.CardFlagID.ToString(), tim);

            }
            this.flowLayoutPanel1.Controls.Add(lab);//就是这里出现了错误!!!!!!!
        }
        /// <summary>
        /// 通过调用委托,来添加label里面的值
        /// </summary>
 private void Run(XmlNode s) 
        {
            weituo.Invoke(s);
        }
        /// <summary>
        /// 创建线程方法 


        /// </summary>
 void StartThread(XmlNode x)
        {
            Thread threadtest = new Thread(new ThreadStart(() => { Run(x); }));
            threadtest.Start();
            
        }

线程间操作无效,大伙帮忙来看看吧 线程 thread xml delegate 遍历
[解决办法]
这种情况最好用线程池,给个MSDN的例子你http://msdn.microsoft.com/zh-cn/library/z6w25xa6

热点排行