为什么幕后工作人员永远无法完成活动
本文关键字:活动 永远 工作人员 为什么 | 更新日期: 2023-09-27 18:22:41
在DoWork事件中,我做了:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bgw = (BackgroundWorker)sender;
distance = 0; counter = 0;
if (bgw.CancellationPending == true)
{
}
else
{
while (counter < 200)
{
counter += 1;
distance = (float)counter;
DateTime dt1, dt2;
dt1 = DateTime.Now;
CloudEnteringAlert.cloudalert(localbmp, distance);
dt2 = DateTime.Now;
TimeSpan ts = dt2 - dt1;
Logger.Write(ts.TotalMilliseconds.ToString());
if (counter == 199)
{
counter = 0;
CloudEnteringAlert.ClearList();
//break;
}
try
{
if (completed == true)
{
return;
}
else
{
this.Invoke(new Action(() =>
{
if (CloudEnteringAlert.cloudsfound == true)
{
listBox1.Items.Add("Cloud detected at: " + CloudEnteringAlert.cloudsdistance.Text + " Kilometers from the coast");
timesdetectedclouds += 1;
label2.Visible = true;
label2.Text = timesdetectedclouds.ToString();
}
else
{
listBox1.Items.Add("Cloud not detected at: " + CloudEnteringAlert.cloudsdistance.Text + " Kilometers from the coast");
timesnotdetectedclouds += 1;
label4.Visible = true;
label4.Text = timesnotdetectedclouds.ToString();
}
}));
}
}
catch (Exception err)
{
Logger.Write(err.ToString());
}
}
}
}
在我完成的活动中:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
}
else if (!(e.Error == null))
{
}
else
{
string t = "Done!";
completed = true;
}
但它从未在完成的赛事中进入国际单项体育联合会。
我通常想做的是在DoWork事件中只向listBox1添加一次项。但它一次又一次地不停地做着。如果我要使用Break;此处:
if (counter == 199)
{
counter = 0;
CloudEnteringAlert.ClearList();
//break;
}
它将到达已完成的事件并停止。但我不想阻止backgorundworker,我只想用listBox1做一次,当它达到199时,不要再继续添加到listBox1,而是继续做其他事情。
如果我理解正确,您希望backgroundWorker1_DoWork代码继续运行,但您希望在DoWork处理了199个项目时触发backgroundWorker.RunWorkerCompleted事件。"Completed"事件表示DoWork代码已完成处理,而不是"done doing something"。我认为TerryBozzio有一个很好的建议。调用ReportProgress在第一个时间计数器==199时激发ProgressChanged事件。