我的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);
    }
}

在您的表单中,只需订阅ProgressChangedCopySomethingAsync事件并显示进度。

10-04 19:47