我正在使用 EventWaitHandle() 处理程序。在等待 10 秒的 ButtonClick 事件中调用此处理程序。还有另一个工作线程在处理程序上接收到一些数据调用 Set() 。问题是 WaitOne() 在超时发生后返回 false。工作线程没有运行并且看起来像是被挂起,因此没有调用 Set()。超时结束后,我的工作线程恢复并调用 Set() 方法。为了验证我在没有 EventWaitHandle() 的情况下尝试检查我的工作线程是否真的需要 10 秒的时间,但它没有,并且 Set() 方法立即生效。我不确定为什么工作线程在我是 C# 新手中发生超时后运行。提前致谢
主窗口.xaml.cs
public static EventWaitHandle autoResetEvent = new EventWaitHandle(false, EventResetMode.AutoReset);
XYZDialogBox.cs
private void BtnConnect_Click(object sender, RoutedEventArgs e)
{
MainWindow.autoResetEvent.Reset();
if (!MainWindow.autoResetEvent.WaitOne(10000))
{
//Line number details is not received from Service
MessageBox.Show("Timeout");
//now disconnect and exit
strCommand = "#cmddisconnect " + tbIPAddress.Text + " #";
tcpClient.AddCommandAsync(strCommand);
return;
}
}
ABC.cs
public void ABC(ref string strData)
{
while(strData != "")
{
//do something
MainWindow.autoResetEvent.Set();
}
}