2017-03-06 7 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スレッドで渡されたラムダ/デリゲートが実行されます。バックグラウンドワーカーからこのように進捗状況/完了通知を実行するだけです。

したがって、UIスレッドでダイアログを表示してから、バックグラウンドワーカーを起動します。これを使用して、UIスレッドでこのコードを実行できます。

ユーザーがダイアログを閉じるときに、バックグラウンドワーカーを同期して停止するようにしてください。

+0

ありがとうございますが、C#6を使用していて、Dispatcher.BeginInvokeまたは関連するアセンブリへの参照が見つかりません。あなたはこれがどのように実施されているかの素早い例を持っていますか?私はちょうどバックグラウンドワーカーのフォームでアニメーションGIFを実行し、その後、バックグラウンドワーカーの複雑な操作のoutisdeを実行し、後でバックグラウンドワーカーを閉じるために探しています...非常に後ろ向きですが、私はこれを行う必要があります。 –

+0

あなたはどのUIフレームワークを使用していますか? Windowsフォーム、WPF、またはWinRT? – yeoman

+0

私はWinRTがUniversal Windows Appsと呼ばれていると思います。 – yeoman

関連する問題