gpt4 book ai didi

c# - 使用另一个线程修改绑定(bind)数据表时不刷新数据网格

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:39 24 4
gpt4 key购买 nike

场景:在 View 模型中有一个绑定(bind)到数据表的数据网格。此数据表引用被注入(inject)到模型中,并使用后台线程进行更新。

结果:基础数据表更新后,Datagrid 不会立即刷新,但如果我在不同的选项卡之间切换,则 datagrid 会显示数据表中存在的最新值。

最佳答案

一个常见的方法是启动一个 background task 用于异步更新数据表并使用 .ContinueWith 连接完成此操作以更新 UI。

Task.Factory.StartNew(() => { ..Do the background DataTable update.. })
.ContinueWith(task => {.. Update the UI.. });



但是你必须 dispatch 由于 STA 限制,.ContinueWith 操作进入主线程。

Task.Factory.StartNew(() => { ..Do the background DataTable update.. })
.ContinueWith(task =>
{
var dispatcher = Application.Current == null
? Dispatcher.CurrentDispatcher
: Application.Current.Dispatcher;

Action action = delegate()
{
//Update UI (e.g. Raise NotifyPropertyChanged on bound DataTable Property)
};

dispatcher.Invoke(DispatcherPriority.Normal, action);
});



由于 Dispatching 操作是一个重复操作,我建议将逻辑放入 ViewModelBase 类中以减少代码,如下所示:

Task.Factory.StartNew(() => ..Do the background DataTable update..)
.ContinueWith(task => Dispatch(() =>
{
//Update UI
}));



要更新 UI,您可以使用 INotifyPropertyChanged 的​​通用通知来引发绑定(bind)数据表上的属性更改事件。

关于c# - 使用另一个线程修改绑定(bind)数据表时不刷新数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422732/

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