在C#多線程編程中,這兩個類幾乎是不可或缺的,他們的用法/聲明都很類似,那麼區別在哪裡了?
Set方法將信號置為發送狀態 Reset方法將信號置為不發送狀態 WaitOne等待信號的發送
其實,從名字就可以看出一點端倪 ,一個手動,一個自動,這個手動和自動實際指的是在Reset方法的處理上,如下面例子
public AutoResetEvent autoevent=new AutoResetEvent(true);
public ManualResetEvent manualevent=new ManualResetEvent(true);
默認信號都處於發送狀態,
autoevent.WaitOne();
manualevent.WaitOne();
如果 某個線程調用上面該方法,則當信號處於發送狀態時,該線程會得到信號,得以繼續執行
差別就在調用後,autoevent.WaitOne()每次只允許一個線程進入,當某個線程得到信號(也就是有其他線程調用
了autoevent.Set()方法後)後,autoevent會自動又將信號置為不發送狀態,則其他調用WaitOne的線程只有繼續等待.也就是說,autoevent一次只喚醒一個線程
而manualevent則可以喚醒多個線程,因為當某個線程調用了set方法後,其他調用waitone的線程獲得信號得以繼續執行,而manualevent不會自動將信號置為不發送.也就是說,除非手工調用了manualevent.Reset().方法,則
manualevent將一直保持有信號狀態,manualevent也就可以同時喚醒多個線程繼續執行