我目前有一个方法,可以使用更多模式扩展的变量创建一个字符串,然后将该字符串发送到串行端口。启用串口写入会冻结UI,但没有它,它运行正常。
private void OnTimedEvent(Object myObject, EventArgs myEventArgs)
{
l = (l > 100) ? 100 : l;
r = (r > 100) ? 100 : r;
mRectangle1 = new RectangleF(13, 153, 80 * (l / 100), 16);
mRectangle2 = new RectangleF(173 - (80 * (r / 100)), 153, 80 * (r / 100), 16);
string start = "";
for (int i = 0; i < 25; i++)
{
start += "0:" + Math.Round(255 * (l / 100)) + ":0;";
}
start += ".";
port.Write(start);
Invalidate();
}
我如何才能最好地解决这个问题,这样我就可以不断冻结串口来发送串口?
答案 0 :(得分:3)
您可以使用BackgroundWorker
类来执行此操作。
DoWork
事件是在后台线程上完成可能耗时的工作的地方。您可以将start
参数传递给引发DoWork
事件的RunWorkerAsync(object)
方法。
快速举例:
// start the work in the background thread like this
backgroundWorker1.RunWorkerAsync(start);
// handles the time-consuming task without blocking the UI thread
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string start = (string) e.Argument;
port.Write(start);
}