|
|
Публикувано в 31.05.2018 г. 14:59:47 ч.
|
|
|
|

Нека първо обсъдим ManualResetEvent, а аз ще вмъкна малко съдържание от AutoResetEvent по време на дискусията, за да сравня:
ManualResetEvent може да блокира една или повече нишки, докато не получи сигнал, който казва на ManualResetEvent да спре блокирането на текущата нишка.
Информация за ManualResetEvent
Представете си, че обектът ManualResetEvent има булево типово свойство, IsRelease, което контролира дали да блокира текущата нишка. Можем да зададем това свойство при инициализация, например ManualResetEvent event=new ManualResetEvent(false); Това показва, че по подразбиране свойството е да блокира текущата нишка.
Пример за код:
Обърнете внимание на важна разлика между ManualResetEvent и AutoResetEvent тук:
Ръководството определено ще изпрати сигнал както към Thread 1, така и към Thread 2,Автоматичният сигнал изпраща само на случаен принцип само към един от тях.
Защо едната се нарича ръчна, а другата автоматична? Мисля, че това е въпрос, който много хора имат и сега ще разгледаме този въпрос.
Просто now_manualResetEvent. Set(); Мисля, че всички разбират това изречение, което може да се разглежда като поставяне на свойството на IsRelease на истина
_manualResetEvent.WaitOne(); Вече не блокира нишка 1 след получаване на сигнал. Стойността на IsRelease е вярна през целия процес след това.Ако
Ако искате да върнете стойността на IsRelease във false, трябва отново да извикате метода _manualResetEvent.Reset().
Ако е _autoResetEvent.set(), тогава _autoResetEvent.WaitOne() автоматично ще зададе стойността на IsRelease на false.
Затова едната се нарича автоматична, а другата е ръчна.
Тестов код:
|
Предишен:. Най-бързият компонент за картографиране на обекти OOM на .NET, Tiny Mapper, в проектната практикаСледващ:C# DEBUG дебъг информация, отпечатване и изход, подробно обяснение
|