BackgroundWorker线程:更新UI和中止操作

eft*_*eft 5 backgroundworker

我在后台工作线程上运行一系列耗时的操作.在不同的阶段,我通过调用委托更新(窗体)进度条.但是,在一行代码中会发生一次更多的时间操作.

是否有可能 :

a)在执行该单行代码时更新UI,或者至少显示一个动画图标,显示用户正在完成工作.

b)让用户在执行该单行代码时取消后台工作线程

jon*_*911 2

不幸的是,可能不会。后台工作线程需要调用 ReportProgress 来更新 UI 线程,并且需要观察 CancellationPending 以了解是否应该停止。因此,如果您的工作线程在单行中运行并行操作,则无法完成此操作。

也许,我误解了,所以这里是模拟我所得到的代码:

public void DoWork() {
    System.Threading.Thread.Sleep(10000);

    // won't execute until the sleep is over
    bgWorker.ReportProgress(100);
}
Run Code Online (Sandbox Code Playgroud)