我做了一个事件处理程序,用于从串口接收数据,只有当我放置断点时才能完美地工作,当我删除它时,函数不会调用这是我的代码 我已经将端口声明为SerialPort的对象
private static void DataReceivedHandler( object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
// sp.Open();
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
if (indata == "kitchen_light_on\r\n")
f1.update_flag("living_light", 1);
else if(indata == "kitchen_light_off\r\n")
f1.update_flag("living_light", 0);
}
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
答案 0 :(得分:2)
您可能遇到竞争条件:如果在sp.ReadExisting()之前放置断点,则端口可能有足够的时间来接收您假装接收的整行。没有断点,对ReadExisting()的调用可能太早或太快,因此端口只接收到一部分行(例如只有“kitchen_li”)。如果发生这种情况,那么你的两个if / elseif条件都将为false,你将看不到任何标志更新 - 事件处理程序被调用但没有做任何事情。
您可以在if / elseif语句中检查这两行代码:
else
Console.WriteLine("Both conditions failed, indata contains " + indata);