C# AutoResteEvent waitOne()函数是我要找的吗?

C# AutoResteEvent waitOne()函数是我要找的吗?,c#,C#,我是这个论坛的新手,但我一直都在查看它,我非常感谢它。 我必须在一开始就说,我不是一个非常熟练或知识渊博的软件程序员,在过去的几天里,我一直在解决一个问题。我的COM1端口上有一个条形码阅读器。我连接,我写“TRIGGER”,它返回(希望是“OK”,当我得到OK时,我发送一个“READ”,它返回一个带有一些字段的大行。现在我的代码是这样的;(代码主要是这样的。我没有全部编写,但是serialPort和waitHandle的内容如下所示) 在SerialPortExample类中 public A

我是这个论坛的新手,但我一直都在查看它,我非常感谢它。 我必须在一开始就说,我不是一个非常熟练或知识渊博的软件程序员,在过去的几天里,我一直在解决一个问题。我的COM1端口上有一个条形码阅读器。我连接,我写“TRIGGER”,它返回(希望是“OK”,当我得到OK时,我发送一个“READ”,它返回一个带有一些字段的大行。现在我的代码是这样的;(代码主要是这样的。我没有全部编写,但是serialPort和waitHandle的内容如下所示)

在SerialPortExample类中

public AutoResetEvent waitHandle = new AutoResetEvent(false);
public string Read()
{
  for (int i=0; i<1000; i++) {
    this._serialPort.Write("TRIGGER" + Convert.ToChar(0));
    waitHandle.WaitOne();
    // a couple lines of stuff
    this._serialPort.Write("GETSTRINGRESULTS" + Convert.ToChar(0));
    waitHandle.WaitOne();
    if (OBarcode.ReadStatus == ReadStatus.SUCCESS) {
      return OBarcode.BarcodeString;
    }
  }

  return "";
}
在表单中,单击一个按钮,我打开连接,执行Read(),Close()连接,等等。我在网上看到了这个AutoResetEvent并决定使用它。当我第一次点击按钮时,一切都很顺利,但是,如果我再次点击按钮。这会打开关闭的连接并再次读取,这次WaitOne()不会等待


我将非常感谢你的帮助。我通常应该如何处理这件事?我犯了严重错误。

在触发第一个WaitOne()后,是否将waitHandle重置为false?我尝试了waitHandle.Reset(),但没有任何更改。我无法确定它在哪些情况下等待,哪些情况下不等待。当我逐行调试时,它似乎在等待,但当我跳转(不逐行调试)或启动而不调试时,它不会等待;var response=read()。那里没有活动。不同之处在于,当您需要数据时,它不会被推送到您的手中。如何正常处理它,而不考虑条形码阅读器,而是一个事件?操作何时需要等待结果?@EduardoMango Try:waitHandle=new AutoResetEvent(false);在触发第一个WaitOne()后,是否将waitHandle重置回false?我尝试了waitHandle.Reset(),但没有任何更改。我无法确定它在哪些情况下等待,哪些情况下不等待。当我逐行调试时,它似乎在等待,但当我跳转(不逐行调试)或启动而不调试时,它不会等待;var response=read()。那里没有活动。不同之处在于,当您需要数据时,它不会被推送到您的手中。如何正常处理它,而不考虑条形码阅读器,而是一个事件?操作何时需要等待结果?@EduardoMango Try:waitHandle=new AutoResetEvent(false);
void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  try {
    string value = _serialPort.ReadExisting();
    ...
    // stuff
    waitHandle.Set();
  } catch(Exception ex) {
    // stuff
  }
}