是AutoResetEvent waitOne()函数我在找什么?

时间:2016-01-26 17:19:49

标签: c#

我是这个论坛上的新人,但我总是检查出来,我非常感激。 我必须在开始时说,我不是一个非常熟练或知识渊博的软件程序员,在过去的几天里,我遇到了问题。我的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 "";
}

这是在来自serialPort

的一些回答时引发的
void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  try {
    string value = _serialPort.ReadExisting();
    ...
    // stuff
    waitHandle.Set();
  } catch(Exception ex) {
    // stuff
  }
}

在单击按钮后面的表单中,我打开连接,执行Read(),Close()连接等操作。我在网上看过这个AutoResetEvent并决定使用。当我第一次单击该按钮时,一切都运行顺畅,但是,如果我再次单击该按钮。重新打开已关闭的连接并再次读取,这次WaitOne()不会等待。

非常感谢您的帮助。我该怎么办呢?我正在做一些严重的错误。

0 个答案:

没有答案