Задержка в фоновом режиме при отображении - PullRequest
0 голосов
/ 28 марта 2019

Я получаю некоторые данные из АЦП и хочу отобразить их в графическом интерфейсе. Все работает нормально, за исключением того, что если я удалю 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();

}
...