【发布时间】:2022-01-11 14:53:36
【问题描述】:
我开发了一个显示实时更新图表的简单 Windows 窗体应用程序:
在以下代码中:
private void Start_Click(object sender, EventArgs e)
{
cpuThread = new Thread(new ThreadStart(this.ThreadUpdateChart));
cpuThread.IsBackground = true;
cpuThread.Start();
}
private void ThreadUpdateChart()
{
if (chart1.IsHandleCreated)
{
this.Invoke((MethodInvoker) delegate { UpdateChart();});
}
else
{
//......
}
Thread.Sleep(1000);
}
private void UpdateChart()
{
for (int i = 0; i < sampleSize; i++)
{
chart1.Series["Signal"].Points.AddXY(i, 100 * var.NextDouble());
chart1.Update();
//Thread.Sleep(500);
}
}
我的问题是,当我按下开始按钮时,图表会正确更新,但这会冻结我的 GUI 直到更新结束,我想在不冻结其他 GUI 功能的情况下更新图表,可以吗?有什么解决办法吗?
【问题讨论】:
-
如果可能的话,只做chart1.Update,一旦你现在对每一个值进行更新。看看设置点是否真的需要同步。也许只需要调用 chart1.Update()。
-
后台工作人员主要用于此类目的,即从另一个线程安全地访问 GUI。你可以在互联网上找到一些很好的例子,但我会留下一个链接-docs.microsoft.com/en-us/dotnet/api/…
-
sampleSize的值是多少?每次迭代都调用chart1.Update();的原因是什么? -
已经和backgroudworker一起尝试过,没有任何问题。图表根据需要实时更新,但在图表更新期间我无法使用表单中的其他按钮/功能
标签: c# multithreading winforms