【问题标题】:Realtime update chart in background without GUI freezing后台实时更新图表,无需 GUI 冻结
【发布时间】: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


【解决方案1】:

首先,线程在您的示例中没有任何用处,它只是在后台线程上运行一些代码,立即要求主线程更新图表。因此,除非您正在执行示例中未显示的计算成本高昂的事情,否则请摆脱它。

您还应该通过一次对图表进行所有更改来获得更好的性能,避免在所有更改完成之前进行渲染等昂贵的操作。所以我会尝试这样的事情:

private void UpdateChart()
        {
            var series  = chart1.Series["Signal"];
            for (int i = 0; i < sampleSize; i++)
            {
                series.Points.AddXY(i, 100 * var.NextDouble());
            }
            chart1.Update();
        }

如果这没有帮助,我建议您进行一些分析以找出实际阻塞 UI 线程的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多