gpt4 book ai didi

c# - 如何避免用户界面卡顿/滞后?

转载 作者:行者123 更新时间:2023-12-02 04:33:45 35 4
gpt4 key购买 nike

我有一个简单的应用程序,它读取数据库,然后经过一些操作将结果写入另一个数据库。

第一行代码使用给用户的消息和屏幕日志更新 ui,然后全部包装在带有 using 和其他 try/catch 的 try/catch 构造中。

message.AppendText("** Message for the user that appear only after the try block's execution **\n");
message.ScrollToEnd();
try
{
using(SqlConnection...)
{
business code
}
}
catch
{
bbbb...
}

最终它可以工作,但是 ui 仅在完成所有操作后才会更新。我可以理解为什么 try 里面的内容必须等待结束,但是为什么第一行直到连续 block 结束才影响 ui?

如何创建响应更快的用户界面?我首先尝试为任何连接创建一个线程(一个超时时间为 5 秒),另一个用于业务代码。好吧,这有点矫枉过正,但正在尝试。我在共享线程之间的连接以及与主窗口的用户界面交互时遇到了很多问题,因此放弃了这个想法并按照上面的描述重写了所有内容。

最佳答案

这里的人们建议创建一个响应式用户界面。这是做到这一点的一种方法。在代码文件的顶部添加:

using System.Threading;

将所有需要很长时间的内容移至新方法:

public void LoadStuff()
{
// Do some stuff that takes a while here
}

用以下代码替换原来的内容:

Thread callThread = new Thread(new ThreadStart(LoadStuff));
callThread.Start();

现在,每当您需要从 LoadStuff 更新 UI 时,您都必须使用此代码封装它(包围它)。原因是只有创建 UI 的线程才能修改它。因此,我们必须告诉新线程引用旧线程来执行代码。因此,在 LoadStuff 内部,计算完一堆数据后,要更新 UI,请使用以下命令:

this.Dispatcher.Invoke(new Action(() =>
{
// Code to update UI here
}));

就像其他人所建议的那样,还有其他方法可以提高 UI 速度,而且我并不是第一个建议使用不同线程进行计算的人。但我只是想向您展示一种方法。

关于c# - 如何避免用户界面卡顿/滞后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22458479/

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