Я хочу выполнить код из одного потока одновременно из двух. Я пытался, но это не работает, как ожидалось. Пожалуйста, прочитайте TODO:
в приведенном ниже примере кода:
public class Test
{
private static ManualResetEvent waitHandle = new ManualResetEvent(false);
public void Start()
{
int i = 1;
System.Timers.Timer t = new System.Timers.Timer(1000);
// this timer will run in a different thread.
t.Elapsed += (sender, args) =>
{
waitHandle.WaitOne();
Console.WriteLine("From Timer Event... ");
t.Enabled = false;
Thread.Sleep(5000);
// some logic here and implementation.
/* TODO:
When I reach to this,
I want to resume the execution from while loop. */
waitHandle.Set();
};
t.Start();
t.Enabled = false;
while(true)
{
Console.WriteLine("From while loop..");
if (i == 10)
{
/* TODO:
on this condition,
I want to block the execution here and
start the timer execution.
This execution must be blocked
until timer execution is finished. */
t.Enabled = true;
waitHandle.Set();
/* TODO:
once the time elapsed event completed,
I want to resume back from this loop. */
waitHandle.WaitOne();
}
i++;
Thread.Sleep(1000);
}
}
- По сути, я хочу запустить код только из одного потока и заблокировать другой поток. Когда выполнение завершено или выполняется определенное условие, я должен заблокировать текущий и возобновить выполнение из другого потока, из которого он был остановлен.