1

多くの単一ファイルからデータをインポートする必要がある WPF プロジェクトに取り組んでいます。これらのファイルとその中のデータの実際のインポートは、backgroundworker doWork メソッドで行われています。それは魅力のように機能し、仕事をし、進行状況バーの更新も完全に機能します。

ただし、これらのファイルで遭遇した内容によっては、現在のファイルの処理を続行する前に、ユーザーから決定を得る必要がある場合があります。

ウィンドウ/ダイアログを開き、そこに設定された値を backgroundworker.doWork メソッドに戻して処理を続行する最良の方法は何ですか?

それはバックグラウンドワーカーでも可能ですか、それともその処理ロジックをメイン/UI スレッドに保持し、そこから何らかの形でプログレス バーを更新する必要がありますか?

特定の問題に関する有用な情報があまり見つからないため、ヒントを提供したり、他のリソースを紹介したりできることを願っています。

4

2 に答える 2

0

またはShowDialogOpenFileDailog classを呼び出すことができます(これにより、新しいスレッドも作成されます)。new ThreadBackgroundWorker

ただし、メイン スレッドで実行されているプロパティまたはコントロールを渡したり更新したりする場合は、次のDisptacherように使用する必要があります。

Dispatcher.BeginInvoke(new Action(() => { YourMethodThatUpdatesSomething(); }));
于 2012-07-31T22:32:48.497 に答える
0

バックグラウンド ワーカーは別のスレッドで動作します。バックグラウンド スレッドから UI を直接呼び出すことはできません。あなたがやろうとしていることを達成する1つの方法は、フラグとDispatcherを使用してユーザー入力用のUIを呼び出すことです

    bool WaitFor_Input = false; //flag to indicate user input status

    private void ThreadRun()
    {
        //THIS IS IN Background worker thread
        //do task
        WaitFor_Input = true;
        //ask for user input
        Dispatcher.BeginInvoke(new Action(Show_Dialogue), null);
        while (WaitFor_Input); //Background worker waits untill user input is complete
        //continue further processing
    }

    private void Show_Dialogue()
    {
        //THIS IS IN UI THREAD
        //show your dialogue box here, update data variables
        //finally set
        WaitFor_Input = false;
    }

処理ロジックをバックグラウンド スレッドに保持することは、実際には良い考えです。

于 2012-07-31T22:47:33.037 に答える