1

実際、バックグラウンド スレッドで実行時間の長いプロセスを実行することはできません。長時間実行されるプロセスは、UI から直接入力を取得し、変更をデータベースに保存する必要があります。そのため、この長時間実行されるプロセスは、Dispatch コード内に記述されているにもかかわらず、バックグラウンド スレッドで入力にアクセスできません (以下を参照)。

  this.Dispatcher.Invoke((Action)(() =>
   {
       ...//The long running process inside background thread.
   }));

私の基本は、長時間実行されるプロセスの実行中にユーザーが他の場所をクリックできないようにすることです。それで、これを行うことができる他の方法はありますか?

4

1 に答える 1

1

私はこのようにします:

  • 並行のいずれかの「グローバル」(UI スレッドとバックグラウンド スレッドで見られる) オブジェクトを作成します。シングルトンにするか、オブジェクトを両方のスレッドに渡すことができます
  • 実行時間の長いスレッドが行うことは、並行オブジェクトからデータを読み取って処理することだけです。
  • メイン スレッド (またはその他のスレッド) がバックグラウンドで何かを実行する必要がある場合は、それを並行コレクションに追加するだけです。

並行プログラミングにおけるこの種のアプローチは、生産者消費者問題と呼ばれます。

于 2013-06-20T06:45:29.873 に答える