在BackgroundWorker中加载对话框

时间:2017-03-06 12:47:45

标签: c# multithreading backgroundworker

由于众多原因,我无法在后台工作程序中运行代码的主要部分,我可以在后台工作程序中运行“加载”对话框,但需要在执行主代码部分后关闭对话框。我对以下内容表示赞赏,但我不确定如何在代码执行后强行关闭后台工作程序:

    LoaderWorker = new BackgroundWorker();

    //Loading is the Form
    Loading Loader = new Loading("Daten Exportieren");

    LoaderWorker.DoWork += (s, args) =>
    {
    //Show Loading Dialog
    Loader.Show();
    };

    ExecuteMainTasks();

    //Here i need to stop the backgroundworker after the method above is complete.

对于后台工作者是否有解决方案,或者我应该使用不同的方法来确保我不锁定加载器的UI线程。记住......我无法在后台工作程序中执行主代码,因此必须稍微向后管理。

感谢。

1 个答案:

答案 0 :(得分:0)

Control.Invoke
Control.BeginInvoke

(Windows窗体)

Disopatcher.Invoke
Dispatcher.BeginInvoke

(WPF)

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync

(WinRT)

从后台工作程序调用它将在UI线程中执行传递的lambda / delegate。只需从后台工作人员那里以这种方式执行进度/完成通知。

因此,在UI线程中显示对话框,然后启动后台工作程序,从中可以使用这种方式在UI线程中执行代码。

确保在用户cacels / close对话框时同步停止后台工作程序。