我的WinForm调用一个执行一些复制 Action 的类。我想在表单上显示此进度。
我想使用Backgroundworker,但是我不知道如何报告从类到表单的进度(/backgroundworker)
最佳答案
使用OnProgressChanged()的BackgroundWorker方法报告进度,并订阅BackgroundWorker的ProgessChangedEvent来更新GUI中的进度。
您的复制类知道BackgroundWorker
并订阅了ProgressChanged
。它还公开了事件处理程序针对后台 worker 的ProgressChanged
事件引发的自己的ProgressChanged
事件。最后,您的Form
订阅了副本类的ProgressChanged
事件并显示进度。
代码:
public class CopySomethingAsync
{
private BackgroundWorker _BackgroundWorker;
public event ProgressChangedEventHandler ProgressChanged;
public CopySomethingAsync()
{
// [...] create background worker, subscribe DoWork and RunWorkerCompleted
_BackgroundWorker.ProgressChanged += HandleProgressChanged;
}
private void HandleProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (ProgressChanged != null)
ProgressChanged.Invoke(this, e);
}
}
在您的表单中,只需订阅
ProgressChanged
的CopySomethingAsync
事件并显示进度。