C# 如何使用后台工作人员?

C# 如何使用后台工作人员?,c#,winforms,C#,Winforms,我有一个设计师的背景工作人员。将选项WorkerReportsProgress和WorkerSupportsScanCellations设置为true。 还添加了backgroundworker的所有三个事件 现在我有计时器1滴答事件: private void timer1_Tick(object sender, EventArgs e) { counter += 1; label9.Text = counter.ToString

我有一个设计师的背景工作人员。将选项WorkerReportsProgress和WorkerSupportsScanCellations设置为true。 还添加了backgroundworker的所有三个事件

现在我有计时器1滴答事件:

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与NewsUpdate方法一起使用

  • 如果在backgroundworker的每个事件中都有,我应该添加什么

  • 在NewsUpdate方法中是否存在backgroundworker会对其抛出异常的方法或文件,因为它是ui或其他什么


  • 我看不到在代码中创建
    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类进行调用。