我是这个论坛上的新人,但我总是检查出来,我非常感激。 我必须在开始时说,我不是一个非常熟练或知识渊博的软件程序员,在过去的几天里,我遇到了问题。我的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()不会等待。
非常感谢您的帮助。我该怎么办呢?我正在做一些严重的错误。