Приостановить другой поток и запустить выполнение в одном потоке одновременно из двух потоков - PullRequest
0 голосов
/ 09 февраля 2020

Я хочу выполнить код из одного потока одновременно из двух. Я пытался, но это не работает, как ожидалось. Пожалуйста, прочитайте 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);
            }
        }
  • По сути, я хочу запустить код только из одного потока и заблокировать другой поток. Когда выполнение завершено или выполняется определенное условие, я должен заблокировать текущий и возобновить выполнение из другого потока, из которого он был остановлен.
...