C # Запуск фонового работника и постоянное обновление интерфейса - PullRequest
0 голосов
/ 14 мая 2018

В моем 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);
        }

Как следует из названия, мне интересно, как я могу выполнять это непрерывно после нажатия кнопки без замораживания потока пользовательского интерфейса. В то время как истинный цикл в событии кнопки заморозит пользовательский интерфейс, в то время как истинный цикл в DoWork_1 приведет к тому, что пользовательский интерфейс никогда не обновится, потому что он застрянет внутри DoWork_1 и никогда не перейдет к RunWorkerCompleted_1.

Может быть, лучше использовать многопоточность, а не фоновый рабочий.

...