Я новичок в многопоточности и должен понимать, как работает AutoResetEvent.
Я пытаюсь реализовать процесс оптимизации, при котором я отправляю данные между двумя разными программами и использую два потока: основной поток, в котором я изменяю и отправляю информацию, и поток получения, всегда работающий в фоновом режиме, ожидающий чтобы поймать сообщение с результатами отправленной информации. Чтобы реализовать это, после отправки сообщения я хочу, чтобы основной поток ждал, пока поток-получатель не получит обратно результат и не запустит событие, которое позволяет основному потоку продолжить с того места, где он остановился.
Вот упрощенная версия моего кода:
// Thread 1 - MAIN
static AutoResetEvent waitHandle = new AutoResetEvent(false);
void foo()
{
for (int i = 0; i < 5; i++)
{
// ... Modify sendInfo data
// Send data to other software
SendData(sendInfo);
// Wait for other software to process data and send back the result
waitHandle.WaitOne();
// Print Result
print(receivedData);
// Reset AutoResetEvent
waitHandle.Reset();
}
}
/////////////////////////////
// Thread 2 - Receiver thread (running in the background)
private event EventHandler MessageReceived;
// ... Code for triggerring MessageReceived event each time a message is received
private static void OnMessageReceived(object sender, EventArgs e)
{
waitHandle.Set();
}
Мой вопрос:
Можете ли вы повторно использовать AutoResetEvent в таком цикле? Я правильно его использую?
Я почти уверен, что мой цикл отправки / получения работает правильно, и событие MessageReceived успешно сработало вскоре после отправленного сообщения. Но хотя мой код отлично работает на одной итерации, он застревает на нескольких итерациях, и я не уверен, почему. Какие-либо предложения?
AutoResetEvent
какManualResetEvent
. stackoverflow.com/questions/153877/ - person itsme86   schedule 21.07.2020