我想實現兩個線程之間的以下通信:當事件發生時喚醒線程
線程Alpha會執行某些操作,然後暫停自己。接下來的第二個線程(Beta)引發並重啓Alpha線程。循環繼續......
我做了類似下面的事情,但我不確定它是否是一個適當的設計。另外我注意到Thread.Suspend()
和Thread.Resume()
已被棄用。我期待着聽到關於這個實現的任何建議,以及替代已棄用方法的優先選擇。
namespace ThreadTester
{
delegate void ActionHandler();
class Alpha
{
internal Thread alphaThread;
internal void Start()
{
while (true)
{
this.alphaThread.Suspend();
Console.WriteLine("Alpha");
}
}
internal void Resume()
{
while (this.alphaThread.ThreadState == ThreadState.Suspended)
this.alphaThread.Resume();
}
}
class Beta
{
internal event ActionHandler OnEvent;
internal void Start()
{
for (int i = 0; i < 15; i++)
{
OnEvent();
Thread.Sleep(1000);
}
}
}
class Program
{
static void Main(string[] args)
{
Alpha alpha = new Alpha();
alpha.alphaThread = new Thread(new ThreadStart(alpha.Start));
alpha.alphaThread.Start();
while (!alpha.alphaThread.IsAlive) ;
Beta beta = new Beta();
beta.OnEvent += new ActionHandler(alpha.Resume);
Thread betaThread = new Thread(new ThreadStart(beta.Start));
betaThread.Start();
}
}
}
這可能最接近回答問題的真實意圖,儘管很難確定。新的BlockingCollection絕對是實現這種簡單Producer-Consumer模式的更好方式,而不是直接使用低級別同步構造。也就是說,我建議OP謹慎使用這種模式,因爲我已經看到它無法實現(我已經看到至少有一個應用程序,其中有幾十個線程都運行着它們自己的Producer-Consumer'消息'消息處理程序[有三種完全不同的本地模式實現,不會少]。) – 2010-11-16 01:05:49