我目前正在编写一个执行3个基本功能的应用程序:
我的应用程序包含许多测试脚本,每个脚本都执行一系列测试,例如:
public SerialPort comport = new SerialPort();
private void RunTest()
{
byte[] arrayExample = { 0x00, 0x01, 0x02, 0x03 };
// Perform 200 operations and analyze responses
for(int i=0, i<200, i++)
{
// Send byte array to 3rd party device
comport.Write(arrayExample, 0, arrayExample.length);
// Receive response
int bytes = comport.BytesToRead;
byte[] buffer = new byte[bytes];
comport.Read(buffer, 0, bytes);
// Check to see if the device sends back a certain byte array
if(buffer = { 0x11, 0x22 })
{
// Write "test passed" to RichTextBox
LogMessage(LogMsgType.Incoming, "Test Passed");
}
else
{
// Write "test failed" to RichTextBox
LogMessage(LogMsgType.Incoming, "Test Failed");
}
}
}
在当前设置中,我的UI在测试脚本期间没有响应(通常持续2-3分钟)。
正如您所看到的,我没有使用DataReceived
事件。相反,我选择专门调出何时通过串口写入/读取。我这样做的部分原因是因为我需要在写入更多数据之前停止并分析缓冲区响应。有了这种情况,有没有办法仍然多线程这个应用程序?
答案 0 :(得分:1)
您需要在另一个线程上运行它。
Thread testThread = new Thread(() => RunTest());
testThread.Start();
我假设
LogMessage();
正在访问用户界面。线程您不能直接访问UI,因此最简单的方法是匿名的。在LogMessage中,您可以执行类似
的操作this.Invoke((MethodInvoker)delegate { richTextBox.Text = yourVar; });