Я хотел бы добиться следующей связи между двумя потоками:
Тема Альфа что-то делает, а затем приостанавливает себя. Далее возникает второй поток (бета) и событие, которое возобновляет поток альфа. Цикл продолжается ...
Я сделал что-то вроде ниже, но я не уверен, что это правильный дизайн. Также я заметил, что 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();
}
}
}