ManualResetEvent (WaitOne и Set) повторяется несколько раз - PullRequest
0 голосов
/ 16 мая 2019

Можно ли несколько раз повторить ManualResetEvent?

Примерно так:

receivedDone.WaitOne();
//something here
receivedDone.Set(); //this go back to receivedDone.WaitOne()
//when executing the second time will loop the receivedDone.Set() and not returning 
//again to receivedDone.WaitOne(); like I wanted.

Итак, мой вопрос:

можно выполнить несколько раз, как цикл, один и тот же WaitOne ();и Set ();?

РЕДАКТИРОВАТЬ:

У меня есть кнопка, когда я нажимаю на нее, запускаю функцию для запуска моего tcpclient.

Послечто я жду ответа от сервера с receivedDone.WaitOne();, когда получаю сообщение в моем буфере, оно переходит к receivedDone.Set();.Это работает 1 раз, но я хочу сделать это несколько раз с одним и тем же WaitOne ();и Set ();

Возможно ли это?

1 Ответ

1 голос
/ 17 мая 2019

Как видно из названия, ManualResetEvent необходимо сбросить вручную.Это как дверь.Инициализируется с помощью

ManualResetEvent ev = new ManualResetEvent(false);  // The door is closed

или

ManualResetEvent ev = new ManualResetEvent(true);  // The door is open

Поток, который вызывает WaitOne, пропускает дверь, если он открыт, в противном случае ждет у двери, пока она не откроется.

Звонок

ev.Set();

открывает дверь, а звонок

ev.Reset();

закрывает дверь.

Насколько я понимаю ваш вопрос,AutoResetEvent поможет больше.Или даже лучше создать асинхронную функцию, которая выполняет вызов TCP и возвращает результат.

...