2012-07-16 45 views
0

所以我們假設我有3個線程運行一個類的實例。課程將執行幾項任務。當班級達到某一點時,應該打開一個窗口,用戶可以在其中輸入內容,然後在按鈕上單擊該窗體將關閉,並且該線程應執行最後一個用戶輸入的值。單擊線程傳遞值

  1. 開始3主題。 (每個線程有不同的值。)
  2. 執行幾個任務。
  3. 打開窗口並等待輸入。
  4. 用戶輸入一些數據並點擊「確定」。
  5. 線程獲取數據並執行一些額外的任務。
  6. 完成。

那麼,如何將輸入值傳遞給線程/類?

信息:這是WPF,而不是WinForms。

我期待着一些答案。

+1

感謝您提供的信息,但是......您的文本中是否有某個問題? – Treb 2012-07-16 12:18:35

+0

對,對不起。看過它並添加它。 – Mek 2012-07-16 12:19:29

+0

好的,謝謝;-) – Treb 2012-07-16 12:24:24

回答

1

您需要將您需要的數據放入某個共享狀態,然後從另一個線程訪問該狀態。當表單打開後臺線程等待WaitHandle &時,讓用戶與表單交互。當用戶點擊Okay時,首先填充共享狀態,然後重置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的信息,但是here's a great primer from Joe Albahari

+0

另一種方法是線程實例在等待某個事件之前將其自身開始調用到GUI。 '共享狀態'可以只是線程類的數據成員。由於GUI線程和工作線程不能同時訪問狀態,因此不需要任何鎖定。你可以通過一個自定義的線程類來創建一個抽象的「FormShow()」方法,GUI將調用該方法來顯示錶單,並在關閉後發出一些內部事件的信號,以使工作線程再次運行。 – 2012-07-16 13:24:18