使用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();
}
}
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);
}
}