我是一名wpf新手,所以请原谅任何不合适的事情......
我有一个WPF应用程序,在启动时从我的SQL数据库加载许多(20000+)项并将它们存储到一个在xaml.cs后台文件中创建的ObservableCollection中。
我创建了一个类,其构造函数创建一个线程并启动线程,线程无限循环。
public StatusChanged()
{
Thread thread = new Thread(new ThreadStart(ThreadProc));
thread.Start();
}
这个线程的启动方式是在代码(xaml.cs)后面的主窗口中创建这个线程类的实例
在这个帖子中,我有一个while循环,可以做一些可能导致我的UI窗口无响应的事情:
无限循环,运行sql命令检查数据库中的任何项目是否有位标志已更改。如果没有找到,则线程休眠3秒并且循环继续
当从数据库返回行时,我遍历每一行并找到更改的属性并修改我的ObservableCollection以及通过为每个行运行SQL Update命令来修改数据库中的位标志。然后线程再次休眠3秒钟并继续循环。
这是对正在发生的事情的概述。当从数据库返回行并且从第2点开始完成工作时,UI可能无响应。当我尝试单击一个按钮时,通常可以说75%以上的时间,但是25%的时间UI没有响应且没有任何反应。这对我的应用来说非常糟糕。
根据我的例子,您认为UI没有响应是什么?可能是......
循环遍历数据库返回的每一行的while循环?
更新while循环^^内的observable集合,并为每个项目进行sql update调用。
我的线程的启动方式,睡眠并由xaml.cs代码中的实例创建?
答案 0 :(得分:0)
如果将20000多个项目的Observable集合绑定到UI,则可能需要在修改项目时更新UI。对于UI线程而言,这可能非常昂贵,导致UI无响应。
尝试一些建议:
答案 1 :(得分:0)
您也可以使用Paginator加载项目。这对管理大量信息的应用程序非常有用。