Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用辅助线程替换Backgroundworkerclass_C#_.net_Multithreading - Fatal编程技术网

C# 用辅助线程替换Backgroundworkerclass

C# 用辅助线程替换Backgroundworkerclass,c#,.net,multithreading,C#,.net,Multithreading,我已经使用Backgroundworkerclass更新了我的用户界面元素(标签)。请检查下面的代码。它工作得很好。但我正在尝试替换Backgroundworkerclass,并使用简单的工作线程来实现相同的目标。我怎样才能做到这一点?如有任何建议,将不胜感激。谢谢 public void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { label1.Text =

我已经使用Backgroundworkerclass更新了我的用户界面元素(标签)。请检查下面的代码。它工作得很好。但我正在尝试替换Backgroundworkerclass,并使用简单的工作线程来实现相同的目标。我怎样才能做到这一点?如有任何建议,将不胜感激。谢谢

public void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        label1.Text = e.ProgressPercentage.ToString();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (!backgroundWorker1.IsBusy)
            backgroundWorker1.RunWorkerAsync();
        else
            label1.Text = "Busy Processing";
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 0; i <= 100; i++)
        {
            Thread.Sleep(100);
            backgroundWorker1.ReportProgress(i);

            if (backgroundWorker1.CancellationPending)
            {
                e.Cancel = true;
                backgroundWorker1.ReportProgress(0);
                return;
            }
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        label1.Text = e.ProgressPercentage.ToString();
    }
public void backgroundWorker\u ProgressChanged(对象发送方,ProgressChangedEventArgs e)
{
label1.Text=e.ProgressPercentage.ToString();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
如果(!backgroundWorker1.IsBusy)
backgroundWorker1.RunWorkerAsync();
其他的
label1.Text=“忙处理”;
}
私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
对于(int i=0;i
委托无效委托工作(int编号);
私有无效按钮1\u单击(对象发送者,事件参数e)
{
新线程(DoWork).Start();
}
公共进度条(int i)
{
if(标签1.InvokeRequired)
{
var d=新的委托工作(ProgressBar);
本节引用(d,i);
}
其他的
label1.Text=i.ToString();
}
公共工作
{

对于(int i=0;我将给你一个提示:开始编写代码,然后在出现问题时询问。如果
BackgroundWorker
工作正常,为什么你要用一个裸线程使你的生活复杂化?我正在学习使用后台线程和工作线程来解决同一问题。这只是为了学习过程。
delegate void DelegateDoWork(int number);
    private void button1_Click(object sender, EventArgs e)
    {
        new Thread(DoWork).Start();
    }

    public void ProgressBar(int i)
    {
        if (label1.InvokeRequired)
        {
            var d = new DelegateDoWork(ProgressBar);
            this.Invoke(d, i);

        }
        else
            label1.Text = i.ToString();
    }

    public void DoWork()
    {
        for (int i = 0; i <= 100; i++)
        {
            Thread.Sleep(100);
            ProgressBar(i);
        }
    }