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