在WPF应用程序中正确使用后台工作者

本文关键字:后台 工作者 WPF 应用程序 | 更新日期: 2023-09-27 18:26:52

我无法正确使用后台工作程序,应用程序需要与数据库通信,因此需要更长的时间,UI会冻结一段时间,我需要创建一个处理数据库事务的函数,并等待工作完成,此时,我想显示一种窗口,通知用户应用程序的状态(加载、繁忙、下载)。

我的代码

我还没有写任何代码,但以下是我需要的:

//instructions
InitializeComponent();
//do this in background and wait until it finnishes
GetEntitiesFromDatabase();
entitiesListView.ItemSource = someList; (GetEntitiesFromDatabase will initialize this list)
//....

我该如何继续,我知道这个问题可能已经在论坛上被问到了,但我迫切需要寻找答案,如果可以通过其他方式完成,请帮助我,提前谢谢。

在WPF应用程序中正确使用后台工作者

如果要像那样直接操作UI,则需要在不在UI线程上时使用Dispatcher.BeginInvoke(在BackgroundWorker中读取)。

Dispatcher.BeginInvoke(new Action(() =>
{
   entitiesListView.ItemSource = someList;
}), null);

您还可以将该项源绑定到视图模型(这是一个更好的想法),框架将为您封送对绑定属性的更改。

基本上,要么使用Dispatcher.BeginInvoke,要么切换到MVVM(WPF无论如何都要使用MVVM)。