显示时延迟后台工作人员

时间:2019-03-28 07:45:01

标签: multithreading backgroundworker

我正在从ADC获取一些数据,并希望将其显示在gui上。一切工作正常,除了如果我删除Thread.Sleep(1),BackgroundWorker不再报告进度。 (我想这需要一些时间)。将线程挂起1毫秒实际上会使BackgroundWorker报告进度,但是非常慢。

我的问题是,有没有办法让我摆脱线程睡眠的问题,但同时使BackgroundWorker正确报告进度?

我正在显示从1K到12K的数据,具体取决于选择。后台工作者对不同的数据样本要求不同的延迟。

这是我的工作循环:

void worker_DoWork(object sender, DoWorkEventArgs e)
{
    bResult = ctrlEptin1.XferData(ref inData, ref GlobalValues.bytes3); // Acquiring data from USB Controller

    GlobalValues.s = ByteArrayToString(inData);
    GlobalValues.buffer3 = Array.ConvertAll(inData, Convert.ToInt32);

    if (worker.CancellationPending)
    {
        //  abortLoop = false;
        e.Cancel = true;
        worker.ReportProgress(0);
        return;

    }
    else worker.ReportProgress(100);
    Thread.Sleep(100);
}

这是我的后台工作者循环:

private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;

    foreach (var series in chart1.Series) // Clearing the chart
    {
        series.Points.Clear();
    }
    for (int v = 0; v < GlobalValues.bytes3; v++) // Displaying data on chart
    {
        chart1.Series[0].Points.AddXY(0, GlobalValues.buffer3[v]);

    }
    chart1.Refresh();

}

0 个答案:

没有答案