我想实现两个线程之间的以下通信:当事件发生时唤醒线程
线程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