C#-SerialDataReceivedEventHandler在第二个事件上执行(始终跳过第一个事件)
我有使用COM4端口的条形码扫描仪。 每次我扫描某样东西时,程序会在第二次扫描后开始读取条形码 所以,我建立了一个项目,试图扫描,但什么都没有发生。我尝试再次扫描(在这个正在运行的项目中),它开始完美地工作 在项目顶部,我声明端口为:C#-SerialDataReceivedEventHandler在第二个事件上执行(始终跳过第一个事件),c#,wpf,serial-port,visual-studio-2019,barcode-scanner,C#,Wpf,Serial Port,Visual Studio 2019,Barcode Scanner,我有使用COM4端口的条形码扫描仪。 每次我扫描某样东西时,程序会在第二次扫描后开始读取条形码 所以,我建立了一个项目,试图扫描,但什么都没有发生。我尝试再次扫描(在这个正在运行的项目中),它开始完美地工作 在项目顶部,我声明端口为: SerialPort port = new SerialPort(); 我有一个定义端口的方法: public void ScannerPortSetup() { port.PortName = "COM4";
SerialPort port = new SerialPort();
我有一个定义端口的方法:
public void ScannerPortSetup()
{
port.PortName = "COM4";
port.BaudRate = 9600;
port.Handshake = Handshake.None;
port.Parity = Parity.None;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.DtrEnable = true;
port.ReadTimeout = 200;
try
{
port.Open();
if (port.IsOpen == true)
{
port.DataReceived += new SerialDataReceivedEventHandler(Recieve);
}
else
{
//print not opened
}
}
catch (Exception e)
{
MessageBox.Show("Error on com4: " + e);
}
}
定义已接收操作的方法:
private void Recieve(object sender, SerialDataReceivedEventArgs e)
{
String recieved_data = port.ReadExisting();
this.Dispatcher.Invoke(() =>
{
if (currentScreenName == ApplicationPages.SkladisteScreen.ToString())
{
MessageBox.Show("scanned completed: " + recieved_data);
}
});
}
再一次,我不知道为什么它不能在第一个事件中触发,但从第二个事件开始,它就完美地工作了。
不管我是将MessageBox放在这个.Dispatcher.Invoke()中还是放在Recieve方法的上面。似乎Receive不是第一次被解雇
有什么想法吗?请在打开之前尝试DataReceived事件注册。并将RtsEnable设置为true。不工作:(可能我在错误的时间启动了ScenerPortSetup()?我在MainWindow.xaml.cs中启动它,在MainWindow加载后,代理设置并显示名为MainFrame.content的页面,这也可能是串行驱动程序的问题。您是否可以尝试使用串行终端(如HTerm)要检查是否在那里接收到第一个数据?HTerm显示了相同的行为-跳过第一次扫描,然后它正常工作。然而,我发现,当我连接设备时,它显示DSR就绪。当第一次扫描发生时,什么也没有发生,但设备关闭DSR,扫描正常工作。因此,这取决于设备。我必须联系制造商呃。