【问题标题】:Loading Dialog in BackgroundWorker在 BackgroundWorker 中加载对话框
【发布时间】:2017-03-06 12:47:45
【问题描述】:

由于多种原因,我无法在后台工作程序中运行代码的主要部分,我可以在后台工作程序中运行加载对话框,但需要在执行主要代码部分后关闭对话框。我已经实现了以下内容,但我不确定如何在代码执行后强制关闭后台工作人员:

    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 线程。请记住...我无法在后台工作程序中执行主要代码,因此必须稍微向后管理。

谢谢。

【问题讨论】:

    标签: c# multithreading backgroundworker


    【解决方案1】:
    Control.Invoke
    Control.BeginInvoke
    

    (Windows 窗体)

    Disopatcher.Invoke
    Dispatcher.BeginInvoke
    

    (WPF)

    CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync
    

    (WinRT ?)

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

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

    只需确保在用户取消/关闭对话框时同步停止后台工作程序。

    【讨论】:

    • 感谢 Yeoman,但我使用的是 C#6,找不到对 Dispatcher.BeginInvoke 或相关程序集的任何引用。你有没有一个简单的例子来说明这是如何实现的?我只是想在后台工作人员中以一种形式运行动画 gif,然后在后台工作人员之外运行一个复杂的操作,然后关闭后台工作人员......非常倒退,但我必须这样做。
    • 您使用的是哪个 UI 框架? Windows 窗体、WPF 还是 WinRT?
    • 我认为,WinRT 现在被称为通用 Windows 应用程序,顺便说一句。
    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2011-07-08
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多