В моем 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.
Может быть, лучше использовать многопоточность, а не фоновый рабочий.