所以我們假設我有3個線程運行一個類的實例。課程將執行幾項任務。當班級達到某一點時,應該打開一個窗口,用戶可以在其中輸入內容,然後在按鈕上單擊該窗體將關閉,並且該線程應執行最後一個用戶輸入的值。單擊線程傳遞值
- 開始3主題。 (每個線程有不同的值。)
- 執行幾個任務。
- 打開窗口並等待輸入。
- 用戶輸入一些數據並點擊「確定」。
- 線程獲取數據並執行一些額外的任務。
- 完成。
那麼,如何將輸入值傳遞給線程/類?
信息:這是WPF,而不是WinForms。
我期待着一些答案。
所以我們假設我有3個線程運行一個類的實例。課程將執行幾項任務。當班級達到某一點時,應該打開一個窗口,用戶可以在其中輸入內容,然後在按鈕上單擊該窗體將關閉,並且該線程應執行最後一個用戶輸入的值。單擊線程傳遞值
那麼,如何將輸入值傳遞給線程/類?
信息:這是WPF,而不是WinForms。
我期待着一些答案。
您需要將您需要的數據放入某個共享狀態,然後從另一個線程訪問該狀態。當表單打開後臺線程等待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
另一種方法是線程實例在等待某個事件之前將其自身開始調用到GUI。 '共享狀態'可以只是線程類的數據成員。由於GUI線程和工作線程不能同時訪問狀態,因此不需要任何鎖定。你可以通過一個自定義的線程類來創建一個抽象的「FormShow()」方法,GUI將調用該方法來顯示錶單,並在關閉後發出一些內部事件的信號,以使工作線程再次運行。 – 2012-07-16 13:24:18
看一看這樣的:http://msdn.microsoft.com/en-us/magazine/cc163328.aspx
這裏是一些文本,所以我的答案不會被自動轉換爲一個註釋。
感謝您提供的信息,但是......您的文本中是否有某個問題? – Treb 2012-07-16 12:18:35
對,對不起。看過它並添加它。 – Mek 2012-07-16 12:19:29
好的,謝謝;-) – Treb 2012-07-16 12:24:24