在我的 backgroundWorker1_DoWork_1 中,我正在运行我的方法(TS16serialParsing),它读取串行数据并对其进行解析。
在我的 backgroundWorker1_ProgressChanged_1 中,我什么都不做。
在我的 backgroundWorker1_RunWorkerCompleted_1 中,运行我的方法(TS16printValues)将变量打印到表单中的标签。看起来像这样:
lblPointId.Text = pointID;
lblHz.Text = hz;
lblV.Text = v;
lblSlopeDist.Text = slopeDist;
lblPpm.Text = ppm;
我的代码在按下按钮时激活,如下所示:
private void btnReceive_Click(object sender, EventArgs e)
{
try
{
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
正如标题所示,我想知道如何在没有FREEZING UI线程的情况下点击按钮后连续运行。一段时间真正的循环内部按钮事件将冻结ui,DoWork_1内部的一段时间真正的循环将导致UI永远不会更新,因为它将被困在DoWork_1内并且永远不会进展到RunWorkerCompleted_1。
使用线程代替后台工作者可能更好。