我坚持正确使用后台工作程序,应用程序需要与数据库通信,因此需要更长时间并且UI冻结一段时间,我需要创建一个执行数据库事务的函数并等待直到工作完成,这次,我想显示一种窗口,告知用户应用程序状态(正在加载,忙碌,下载)。
我的代码
我还没有写任何代码,但这就是我需要的:
//instructions
InitializeComponent();
//do this in background and wait until it finnishes
GetEntitiesFromDatabase();
entitiesListView.ItemSource = someList; (GetEntitiesFromDatabase will initialize this list)
//....
我怎么能继续,我知道这个问题可能已在论坛上提出,但我很想找到答案,如果可以通过其他方式做到,请帮助我,提前谢谢。
答案 0 :(得分:2)
如果您要直接操作这样的UI,则当您不在UI线程上时,需要使用Dispatcher.BeginInvoke
(在BackgroundWorker
中读取)。
Dispatcher.BeginInvoke(new Action(() =>
{
entitiesListView.ItemSource = someList;
}), null);
您还可以绑定项目来源到您的视图模型(更好的主意),框架将为您绑定对绑定属性的更改。
基本上,要么使用Dispatcher.BeginInvoke
,要么切换到MVVM(无论如何都要使用WPF)。