0

クラスからインスタンスを実行する3つのスレッドがあるとしましょう。クラスはいくつかのタスクを実行します。クラスがポイントに到達すると、ユーザーが何かを入力できるウィンドウが開き、ボタンをクリックするとフォームが閉じ、スレッドはユーザーが入力した値で最後のタスクを実行する必要があります。

  1. 3 スレッドを開始します。(各スレッドには異なる値があります。)
  2. いくつかのタスクを実行します。
  3. ウィンドウを開き、入力を待ちます。
  4. ユーザーはいくつかのデータを入力し、[OK] をクリックします。
  5. スレッドはデータを取得し、追加のタスクを実行します。
  6. 終了した。

では、入力した値をスレッド/クラスに渡すにはどうすればよいでしょうか?

情報: これは WPF であり、WinForms ではありません。

いくつかの答えを楽しみにしています。

4

2 に答える 2

1

必要なデータを共有状態に配置し、他のスレッドからその状態にアクセスする必要があります。フォームが開いたら、バックグラウンド スレッドを WaitHandle で待機させ、ユーザーがフォームを操作できるようにします。ユーザーが [OK] をクリックすると、最初に共有状態が入力され、次に WaitHandle がリセットされます。これにより、バックグラウンド スレッドが解放され、共有状態からデータが読み取られ、その実行が続行されます。これが基本的なシーケンス図です

  Thread 1            Thread2
T0 -> Hits waitHandle
T1 -> blocked             Launches Form
T2 ->                     User interacts with form
T3 ->                     Okay clicked
T4 ->                     Shared state is populated
T5 ->                     WaitHandle reset
T6 -> Continues
T7 -> Reads shared state

共有状態は、スレッド 1 とフォームの親クラスに配置され、ロックで保護する必要があります。ロックと WaitHandles に関する情報は山ほどありますが、Joe Albahari による優れた入門書を次に示します。

于 2012-07-16T12:41:31.057 に答える
0

これを見てください:http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

そして、ここにいくつかのテキストがあるので、私の答えは自動的にコメントに変換されません。

于 2012-07-16T12:23:15.063 に答える