在工作中,會遇到需要多線程處理相應的業務需求,最典型的包括Socket的通信。 多線程處理里,就會考慮到,哪個線程先運行,哪個線程後運行的情況。 這裡我介紹一下,使用ManualResetEvent類來對線程進行阻塞和繼續操作。 它有三個重要的方法:Reset、Set和WaitOne。 1、首先介紹 ...
在工作中,會遇到需要多線程處理相應的業務需求,最典型的包括Socket的通信。
多線程處理里,就會考慮到,哪個線程先運行,哪個線程後運行的情況。
這裡我介紹一下,使用ManualResetEvent類來對線程進行阻塞和繼續操作。
它有三個重要的方法:Reset、Set和WaitOne。
1、首先介紹一下它的構造函數:
public ManualResetEvent (bool initialState);
參數 initialState,如果為 true,則將初始狀態設置為終止;如果為 false,則將初始狀態設置為非終止。
這是什麼意思呢?它的意思是:如果為 false時,初始化ManaulResetEvent對象為非終止狀態,當有線程調用ManaulResetEvent的WaitOne()方法時,該線程將進入阻塞狀態。
如果改為true,則會初始化ManaulResetEvent對象為終止狀態,當有線程調用ManaulResetEvent的WaitOne()方法時,該線程可以繼續執行後面的操作。
2、Reset()方法
Reset方法,它會將ManualResetEvent的對象設置為非終止狀態,告訴調用ManaulResetEvent的WaitOne()方法的線程:此處將阻塞線程。
3、Set()方法
Set方法與Reset剛好相反,當有線程調用Set()方法時,它會告訴包含ManaulResetEvent的WaitOne()方法的線程:此處改為了終止狀態,程式可以繼續運行了。