Winform如何处理方法冻结UI
本文关键字:方法 冻结 UI 处理 何处理 Winform | 更新日期: 2023-09-27 17:49:32
我目前有一个方法,从变量中创建一个字符串,该字符串将扩展为更多模式,然后它将该字符串发送到串行端口。启用串行端口写入时,会冻结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();
}
我该如何最好地处理这个,所以我可以不断发送串行端口而不冻结UI?
您可以使用BackgroundWorker
类来完成此操作。
DoWork
事件是潜在的耗时工作在后台线程上完成的地方。您可以将start
参数传递给RunWorkerAsync(object)
方法,该方法将触发DoWork
事件。
快速的例子:
// 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);
}