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