C# 如何在Windows窗体应用程序中使用多线程更新进度条?
有两个对象。Windows窗体包含一个按钮和一个进度条,以及另一个处理算法的对象 在算法对象中有一个事件和一个属性。事件是C# 如何在Windows窗体应用程序中使用多线程更新进度条?,c#,.net,events,multithreading,handler,C#,.net,Events,Multithreading,Handler,有两个对象。Windows窗体包含一个按钮和一个进度条,以及另一个处理算法的对象 在算法对象中有一个事件和一个属性。事件是ProgressChanged,属性是Progress(它是一个int) 在调用窗口中,按钮启动算法对象中的一组步骤。当每个步骤(或子步骤)发生时,ProgressChanged事件将激发,并且在窗口中有一个事件处理程序,该事件处理程序基本上相对于progress属性递增进度条 我遇到的问题是,由于算法有可能(而且可能性很高)运行相对较长的时间,我需要将其移动到它自己的背景线
ProgressChanged
,属性是Progress
(它是一个int)
在调用窗口中,按钮启动算法对象中的一组步骤。当每个步骤(或子步骤)发生时,ProgressChanged事件将激发,并且在窗口中有一个事件处理程序,该事件处理程序基本上相对于progress属性递增进度条
我遇到的问题是,由于算法有可能(而且可能性很高)运行相对较长的时间,我需要将其移动到它自己的背景线程中,并将事件推回到窗口
我的问题是,当涉及多线程时,我不能完全确定我在做什么。我已经看过控件。调用了,我有点不知所措
有人能给我指出正确的方向吗?请一位幕后工作人员。它有一个ReportProgress method+事件,让您运行progressbar,而不必担心调用。正如另一张海报所说,使用BackgroundWorker组件。关于以下内容的说明和示例代码:
-Oisin下面是一个如何使用Invoke更改UI线程的示例,在该线程中可以安全地访问控件:
// In some form method, setup the event handler
algorithm.ProgressChanged += new EventHandler(AlgorithmProgressChanged);
private void AlgorithmProgressChanged(Object source, EventArgs args)
{
if (this.InvokeRequired)
{
// Switch to the UI thread
this.Invoke(new EventHandler(AlgorithmProgressChanged), source, args);
return;
}
// It should be safe to set the progress beyond this point.
progressBar.Value = algorithm.Progress;
}
看来这就是解决办法。谢谢