C# 如何使用后台工作人员?
我有一个设计师的背景工作人员。将选项WorkerReportsProgress和WorkerSupportsScanCellations设置为true。 还添加了backgroundworker的所有三个事件 现在我有计时器1滴答事件:C# 如何使用后台工作人员?,c#,winforms,C#,Winforms,我有一个设计师的背景工作人员。将选项WorkerReportsProgress和WorkerSupportsScanCellations设置为true。 还添加了backgroundworker的所有三个事件 现在我有计时器1滴答事件: private void timer1_Tick(object sender, EventArgs e) { counter += 1; label9.Text = counter.ToString
private void timer1_Tick(object sender, EventArgs e)
{
counter += 1;
label9.Text = counter.ToString();
label9.Visible = true;
}
我有一个方法叫做NewsUpdate:
private void NewsUpdate()
{
if (counter == 10)
{
scrollLabel1.Reset();
scrollLabel1.Text = " ";
scrollLabel1.Invalidate();
client.Encoding = System.Text.Encoding.GetEncoding(1255);
page = client.DownloadString("http://rotter.net/scoopscache.html");
TextExtractor.ExtractDateTime(page, newText, dateTime);
StreamWriter w = new StreamWriter(@"d:\rotterhtml\rotterscoops.html");
w.Write(page);
w.Close();
TextExtractor.ExtractText(@"d:\rotterhtml\rotterscoops.html", newText, dateTime);
combindedString = string.Join(Environment.NewLine, newText);
this.scrollLabel1.Text = combindedString;
scrollLabel1.Invalidate();
counter = 0;
}
}
以及所有backgroundworker事件:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
NewsUpdate();
}
进展:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
已完成:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
我想做的是通过backgroundworker每10秒调用一次NewsUpdate方法,这样它就不会在每次更新时冻结应用程序1-2秒。但是现在它只调用一次NewsUpdate方法
我看不到在代码中创建
BackgroundWorker
,但假设您拥有它,您通常只想让DoWork
处理程序调用worker.ReportProgress()
每十秒钟一次。调用ProgressChanged
处理程序,该处理程序可以与UI交互。MSDN有一个独特的功能。首先:你的计时器和后台工作人员是两个独立的东西,没有任何东西将它们联系在一起。你应该在计时器的滴答声中调用backgroundworker的DoWork方法。另外,您正在修改BackgroundWorker的DoWork方法中的UI组件(this.scrollabel1.Text),您应该避免这样做。在将在STA线程中运行的RunWorkerCompleted方法中执行此操作。最后:很可能您不需要ProgressChanged回调。qqbenq您的意思是我应该使用backgroundWorker1.RunWorkerAsync();在timer1滴答事件中?这就是我在timer1 tick事件中调用DoWork事件的方式?请使用System.Windows.Forms.Timer类进行调用。