我正在从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();
}