C#运行后台工作者并不断更新UI

时间:2018-05-14 12:05:57

标签: c# multithreading backgroundworker

在我的 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。

使用线程代替后台工作者可能更好。

0 个答案:

没有答案