【发布时间】:2015-09-01 20:32:57
【问题描述】:
单击按钮时,我的 C# 主窗口会启动一个 taskfactory 任务。 该任务应该从串行设备收集数据,但不仅仅是一次。 它应该“实时”收集数据。 串行模块向该串行设备发送请求。当设备应答时,它应该将数据返回到主窗口(我尝试了一个事件)并再次开始收集数据: 开始任务:
private void menuStartLog_Click(object sender, RoutedEventArgs e)
{
Librarys.SerialCom Comport = new Librarys.SerialCom();
Task<string> serialThread = Task<string>.Factory.StartNew(() => Comport.ADVInfo(), TaskCreationOptions.LongRunning);
textBoxMain.Text = serialThread.Result;
}
这个方法被调用:
public string ADVInfo()
{
openConnection();
if (Comport.IsOpen)
{
Comport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
while (true)
{
Console.WriteLine("Serial Task started.");
byte[] SerialRequest = new byte[3] { 0xF0, 0x02, 0x0D };
Comport.Write(SerialRequest.ToString());
Console.WriteLine("Serial Thread completed.");
//Here the task should return data to the mainwindow and request new data
}
}
return ("No open Comport!!!");
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
但是串行通信的线程阻塞了主线程。 我可以在不等待主线程的情况下返回数据吗,例如有活动吗?
【问题讨论】:
-
因为等待结果仍然发生在你的主线程中。
-
等待 ADVInfo() 并返回任务
.
标签: c# .net multithreading async-await task-parallel-library