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

应用backgroundworker进行异步RunWorkerAsync时候,时间长了,总是出错

2013-05-02 
使用backgroundworker进行异步RunWorkerAsync时候,时间长了,总是出错。刚开始一切正常,时间长了,就提示,bac

使用backgroundworker进行异步RunWorkerAsync时候,时间长了,总是出错。
刚开始一切正常,时间长了,就提示,backgroundworker正忙,这是为什么,求大神指引。。
刚开始学做winform,是不是哪里写的不对,
我的事件里就dowork写了,ProgressChanged,RunWorkerCompleted没有写代码。
dowork代码如下。


 private void bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            if (bgw.CancellationPending)
            {
                return;
            }

            try
            {
                tray_Initform(tagasync.ToString());
            }
            catch (Exception ep)
            {

                Clogs log = new Clogs();
                string path = Environment.CurrentDirectory.Replace("\\bin\\Debug", "") + "\\log\";
                log.LogError("错误追踪", ep, path);
                this.Close();
            }
        }



tray_Initform如下:

   private void tray_Initform(string info)
        {
            DataView dv = new DataView();
            string pathxml = Environment.CurrentDirectory.Replace("\\bin\\Debug", "") + "\\Data\\gw.xml";
            dv = xml.GetDataViewByXml(pathxml, "type=" + info, "type asc");
            DataSet ds = new DataSet();
            ds.Tables.Add(dv.ToTable());


            int dvnum = ds.Tables[0].Rows.Count;


            ///获取类型名字显示

            lblMsg.Text = ds.Tables[0].Rows[0]["typename"].ToString().Trim();


            //string imgpathok = Environment.CurrentDirectory.Replace("\\bin\\Debug", "") + "\\img\\blue.jpg";
            //string imgpathnotok = Environment.CurrentDirectory.Replace("\\bin\\Debug", "") + "\\img\\icon.ico";
            string defaultpath = Environment.CurrentDirectory.Replace("\\bin\\Debug", "") + "\\img\\load.gif";


            for (int i = 0; i < dvnum; i++)
            {
                string sectionname = ds.Tables[0].Rows[i]["name"].ToString().Trim();
                string sectionIP = ds.Tables[0].Rows[i]["ip"].ToString().Trim();
                string sectionPort = ds.Tables[0].Rows[i]["port"].ToString().Trim();
                //动态创建控件

                Label lblGwControl = new Label();
                lblGwControl.Text = sectionname;
                Size sz = new Size(100, 50);
                lblGwControl.Size = sz;
                lblGwControl.Font = new Font("宋体", 10, FontStyle.Bold);
                lblGwControl.ForeColor = Color.Blue;





                PictureBox pbControl = new PictureBox();
                pbControl.Size = new Size(50, 10);
                pbControl.Image = Image.FromFile(defaultpath);




                AddControl(flp, lblGwControl);
                AddControl(flp, pbControl);



                //this.flp.Controls.Add(lblGwControl);
                //this.flp.Controls.Add(pbControl);
                //flp.Show();

            }
            try
            {
                RefreshWindow(dv, info);
            }
            catch (Exception ep)
            {

                Clogs log = new Clogs();
                string path = Environment.CurrentDirectory.Replace("\\bin\\Debug", "") + "\\log\";
                log.LogError("错误追踪", ep, path);


            }
        }



全部的分了。。。
[解决办法]
dowork不是在UI线程上的,你需要在dowork中通过委托的方式来操作UI

热点排行