gpt4 book ai didi

C# WinForms 尝试使用 Timer 更新 UI 但不会降低性能

转载 作者:行者123 更新时间:2023-12-03 13:16:56 25 4
gpt4 key购买 nike

所以目前我有一个有 2 个进程的应用程序。一个进程正在 ping,而 ping 进程正在将结果写入数组。

另一个过程是使用计时器每秒更新一次 UI。更准确地说,正在更新的是一个 mschart。

这就是我设置计时器的方式:

readonly System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Interval = 1000;
myTimer.Tick += WriteFunction;

现在这是我每秒调用的用于刷新 UI/实际上 Graph 的方法:
 private void WriteFunction(object objectInfo, EventArgs e)
{
foreach (NetPinger.source.AddGraph b in graphList)
{
b.fileRead();
}
}

用于更新图表的方法位于另一个类中,如下所示:
    public void fileRead()
{
double unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

chart_holder.Series[0].Points.Clear();

for (double i = unixTimestamp; unixTimestamp - graphSizing < i; i--)
{
bool exists;
try
{
exists = Array.Exists(file, element => element.XValue == i);
exists = true;
}
catch
{
exists = false;
}
try
{

if (exists == false)
{
DataPoint point = new DataPoint(i, 0);
chart_holder.Series[0].Points.Add(point);
}
else
{
DataPoint point = Array.Find(file, element => element.XValue == i);
chart_holder.Series[0].Points.Add(point);
}
}
catch(Exception ex)
{
MessageBox.Show(Convert.ToString(ex));
}
}
}

现在我注意到如果graphSizing(我循环的数字)保持低,性能还不错,一切都是同步的(来自UI的多个图同时更新等)就像它应该的那样。但是,一旦我上升,我们就说喜欢 50 甚至 250(目标应该是什么),UI 和图形更新非常缓慢。它只是像每 3 秒更新一次,而且用户界面通常非常滞后和缓慢。

有没有人对我如何保持良好的性能有任何建议,或者我在哪里搞砸了 UI 这么慢?如有更多问题或更多详细信息,请随时提问。

非常感谢您的时间和帮助。

问候 C.User

最佳答案

您的代码始终在 UI 线程中运行,因为 System.Windows.Forms.Timer在 UI 线程上调用委托(delegate)。即使不是这种情况(并且您使用 System.Timer 代替),您也可以通过 Invoke 调用将所有内容委托(delegate)给 UI。您需要确保首先在另一个线程上准备数据,并尽可能少地在 UI 线程本身中执行。

关于C# WinForms 尝试使用 Timer 更新 UI 但不会降低性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50579028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com