有人可以引入AutoResetEvent.Reset()方法的用例嗎? 何時以及爲何我想要使用此方法? 我明白WaitOne和Set,但這對我來說還不太清楚。AutoResetEvent復位方法
12
A
回答
6
1
看起來它只是繼承自EventWaitHandle。 ManualResetEvent也可能更有用,該ManualResetEvent也是從該類繼承的?
0
使用Reset()時應使用ManualResetEvent,因爲AutoResetEvent會在線程發出信號時重置自身。
1
該方法繼承自基類EventWaitHandle
,用於(重新)將AutoResetEvent
設置爲其「已阻止」狀態。
由於AutoResetEvent
會在發出信號後立即自動進入該狀態,因此您通常不會在代碼中看到此方法,但對於來自EventWaitHandle
的其他類,它會更加有用!
1
如果AutoResetEvent生產者想要清除該事件,則可以使用Reset()。通過這種方式,您可以安全地「重置」事件,而無需知道當前是否發送了信號。如果生產者使用WaitOne來「重置」它自己的事件,則存在死鎖的風險(即,由於事件未被髮信號且生產者線程被阻塞,所以永遠不會返回)。
0
復位:
設置爲無信號 事件的狀態,見EventWaitHandle Class
樣品,
using System;
using System.Threading;
namespace ThreadingInCSharp.Signaling
{
class Program
{
static EventWaitHandle _waitHandle = new AutoResetEvent(false);
static void Main(string[] args)
{
//The event's state is Signal
_waitHandle.Set();
new Thread(Waiter).Start();
Thread.Sleep(2000);
_waitHandle.Set();
Console.ReadKey();
}
private static void Waiter()
{
Console.WriteLine("I'm Waiting...");
_waitHandle.WaitOne();
//The word pass will print immediately
Console.WriteLine("pass");
}
}
}
使用Rese t,
using System;
using System.Threading;
namespace ThreadingInCSharp.Signaling
{
class Program
{
static EventWaitHandle _waitHandle = new AutoResetEvent(false);
static void Main(string[] args)
{
//The event's state is Signal
_waitHandle.Set();
_waitHandle.Reset();
new Thread(Waiter).Start();
Thread.Sleep(2000);
_waitHandle.Set();
Console.ReadKey();
}
private static void Waiter()
{
Console.WriteLine("I'm Waiting...");
_waitHandle.WaitOne();
//The word will wait 2 seconds for printing
Console.WriteLine("pass");
}
}
}
相關問題
- 1. autoresetevent和manualresetevent
- 2. RegisterWaitForSingleObject VS的AutoResetEvent
- 3. AutoResetEvent澄清
- 4. AutoResetEvent進程?
- 5. CancellationTokenSource或AutoResetEvent
- 6. 的AutoResetEvent()在C#
- 7. 遞增autoresetevent c#
- 8. IObservable - 替換AutoResetEvent
- 9. .NET AutoResetEvent:如何知道進程是否在等待(方法WaitOne)?
- 10. Windows Phone 7.1:AutoResetEvent不適用於服務方法?
- 11. 從不同線程調用AutoResetEvent方法是否安全?
- 12. 新的AutoResetEvent(true)在C#中的用法?
- 13. 復位數據流星方法
- 14. 實現ManualResetEvent和AutoResetEvent
- 15. 多次使用AutoResetEvent
- 16. 檢查AutoResetEvent狀態
- 17. 的AutoResetEvent不工作
- 18. 度量單位 - 重複使用不同單位的方法
- 19. 無法()復位JQUERY
- 20. iPod無法復位
- 21. 無法復位sailsjs
- 22. .NET線程 - HttpWebRequest BeginGetResponse + AutoResetEvent
- 23. C#線程與AutoResetEvent問題
- 24. 如何解鎖已在AutoResetEvent對象上調用WaitOne方法的線程?
- 25. 有沒有一種簡單的方法在C++ 0x中實現AutoResetEvent?
- 26. iPhone定位方法
- 27. 等辦法來完成的的AutoResetEvent不會阻塞UI
- 28. AutoResetEvent的這種用法是否會導致描述的問題?
- 29. 複製elision方法
- 30. ARC:複製方法
爲什麼選擇關閉?這個問題似乎對我來說非常明確和有用...... – 2011-05-03 14:33:40