我有VS2010,我正在開發一個Windows窗體應用程序。因此,我有動態創建的線程(取決於用戶輸入),這些線程的處理可能需要一段時間的安靜(極端情況下的幾天)。所以我在表單上放了一個按鈕,並希望能夠「暫停」或「暫停」線程。我查了一下.suspend方法,它已被替換(我嘗試過使用它,但它有時會失敗 - 導致UI崩潰),所以我發現的新方法是'waithandle'。我已經閱讀了這個文檔,我無法解決如何使用它。如何在vb.net中使用waitHandle
這是每個線程的基本結構:
Do
'time consuming operations
loop 'a number of times
然後在一個單獨的按鈕,我想提出的暫停碼。並不是那麼重要,它很快就暫停了,在下一次循環中暫停是正常的(每次運行都很快,它只是做了幾百次)。我假設我必須在循環開始時進行waithandle檢查,但實際上我不知道如何實現這一點。這是我的WaitHandle昏暗代碼:
Dim waitHandles As System.Threading.EventWaitHandle = New System.Threading.AutoResetEvent(True)
所有線程都在一次暫停(除主UI線程),所以我想這意味着我只需要一個等待句柄,但我不知道這件事。
無論如何,如果任何人都可以告訴我什麼代碼進入循環,什麼進入暫停按鈕,我想我可以通過其他一切工作。 :)
非常感謝!
弗雷澤
從評論:
謝謝!我得到了它的工作。這裏是我的執行力度:
Dim mre As New System.Threading.ManualResetEvent(True)
(這是在代碼(只是在「公共類方式1」的頂部) 然後在線程它具有:
mre.WaitOne(),
終於在暫停按鈕/取消暫停線程它具有:
mre.Reset() 'to resume the threads and, mre.Set() 'to pause the threads
謝謝!我得到了它的工作。這裏是我的實踐:Dim mre As New System.Threading.ManualResetEvent(True)(位於代碼的頂部(在'public class form 1'下面),然後在線程中有:mre。WaitOne(),最後在暫停/取消暫停線程的按鈕中:mre.Reset()'恢復線程,mre.Set()'暫停線程:)(如果有人可以編輯它更整潔一些,我認爲這會對其他人有所幫助,我只是不知道如何!) – FraserOfSmeg