2017-03-06 50 views
0

由於很多原因,我無法在後臺工作器中運行代碼的主要部分,我可以在後臺工作器中運行加載對話框,但需要在執行主代碼部分後關閉對話框。我implimented以下,但我不知道如何強行關閉後臺工作人員的代碼執行後:在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線程。請記住......我不能在後臺工程中執行主代碼,所以必須稍微向後處理。

謝謝。

回答

0
Control.Invoke 
Control.BeginInvoke 

(Windows窗體)

Disopatcher.Invoke 
Dispatcher.BeginInvoke 

(WPF)

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync 

(WinRT的)

從後臺工作者調用此函數將在UI線程中執行傳遞的lambda/delegate。只需從您的後臺工作人員以這種方式執行進度/完成通知。

因此,在UI線程中顯示您的對話框,然後啓動後臺工作器,從中您可以使用這種方式在UI線程中執行代碼。

只要確保在用戶收起/關閉對話框時同步停止後臺工作器。

+0

謝謝Yeoman,但我使用的是C#6,並且找不到對Dispatcher.BeginInvoke或相關程序集的任何引用。你有沒有機會快速舉例說明這是如何實現的?我只是想在後臺工作人員的表單中運行動畫GIF,然後運行背景工作者的複雜操作,然後關閉後臺工作人員......非常倒退,但我必須這樣做。 –

+0

你使用哪個UI框架? Windows窗體,WPF或WinRT? – yeoman

+0

我想,WinRT現在稱爲通用Windows應用程序,順便說一句。 – yeoman