在工做中,會遇到須要多線程處理相應的業務需求,最典型的包括Socket的通訊。多線程
多線程處理裏,就會考慮到,哪一個線程先運行,哪一個線程後運行的狀況。函數
這裏我介紹一下,使用ManualResetEvent類來對線程進行阻塞和繼續操做。spa
它有三個重要的方法:Reset、Set和WaitOne。線程
一、首先介紹一下它的構造函數:code
public ManualResetEvent (bool initialState);
參數 initialState,若是爲 true,則將初始狀態設置爲終止;若是爲 false,則將初始狀態設置爲非終止。對象
這是什麼意思呢?它的意思是:若是爲 false時,初始化ManaulResetEvent對象爲非終止狀態,當有線程調用ManaulResetEvent的WaitOne()方法時,該線程將進入阻塞狀態。blog
若是改成true,則會初始化ManaulResetEvent對象爲終止狀態,當有線程調用ManaulResetEvent的WaitOne()方法時,該線程能夠繼續執行後面的操做。it
二、Reset()方法class
Reset方法,它會將ManualResetEvent的對象設置爲非終止狀態,告訴調用ManaulResetEvent的WaitOne()方法的線程:此處將阻塞線程。構造函數
三、Set()方法
Set方法與Reset恰好相反,當有線程調用Set()方法時,它會告訴包含ManaulResetEvent的WaitOne()方法的線程:此處改成了終止狀態,程序能夠繼續運行了。