C# C如何将数据从eventhandler返回到线程
以下函数在我的应用程序中作为线程运行。My function从串行设备请求数据。 我将此代码用于我的任务:C# C如何将数据从eventhandler返回到线程,c#,events,serial-port,task-parallel-library,C#,Events,Serial Port,Task Parallel Library,以下函数在我的应用程序中作为线程运行。My function从串行设备请求数据。 我将此代码用于我的任务: private void request(ClsComSettingMain clsComSettingMain, CancellationToken token) //class for async data requests { Console.WriteLine("Debug: Hello from serialTask."); string comPort = c
private void request(ClsComSettingMain clsComSettingMain, CancellationToken token) //class for async data requests
{
Console.WriteLine("Debug: Hello from serialTask.");
string comPort = clsComSettingMain.comport;
int baudRate = clsComSettingMain.baudRate;
if (comPort != null && baudRate != 0)
{
SerialPort serialPort = new SerialPort(comPort, baudRate);
serialPort.ReadTimeout = 200;
serialPort.Open();
serialPort.DataReceived += new SerialDataReceivedEventHandler(readSerialIn); //register for SerialDataReceivedEvent
while (true)
{
if (token.IsCancellationRequested)
{
Console.WriteLine("Debug: Serialthread cancelled.");
serialPort.Dispose(); // free all ressources for GC
return;
}
else
{
if (!pfcDataRequested) //check if data is already requested
{
Console.WriteLine("Debug: Requesting data from serial, send raw: 0xF0, 0x02, 0x0D");
serialPort.Write(adv_request, 0, 3); // Write byte array to serial port, with no offset, all 3 bytes
pfcDataRequested = true;
}
}
}
}
}
eventhandler应该读取串行数据(如果可用),并将其返回到函数请求。之后,请求应请求新数据。但我不明白如何让线程等待eventhandler完成并将bool请求设置回false,以便发送新请求。根据您提供的代码片段,pfcdatarequest是该类的成员。因此,在本例中,您只需要修改readSerialIn回调方法,即在方法末尾,成员pfcdatarequest再次设置为false
比如pfcDataRequested=false。为什么不使用serialPort.Read方法?因为我不知道串行设备的响应速度有多快。因此,一个事件应该是最好的方式没有解释的否决票永远是一件伟大的事情-