目录
分享
如何使用 WPF 中的任务正确刷新网格中的数据
c#wpfdata-bindingdevexpresstask
浏览量:854
编辑于:2023-04-12 23:02:37
我的小 WPF 代码给了我这个错误调用线程无法访问此对象,因为其他线程拥有它 我知道它到底在说什么,但我无法理解如何解决它。我尝试过不同的东西,但没有运气,我承认我在任务库中并不擅长。
这就是我正在努力实现的目标。
- 加载 WPF 表单时加载数据 - 这没关系
- 在表单上,用户将按**“刷新”**按钮以刷新数据库中的数据。
这是我的代码
public partial class DocListView : UserControlListBase
{
private ScecoBillDataScope _scecoBillDataScope;
public EntityCollection<ScecoBillEntity> ScecoBills = new EntityCollection<ScecoBillEntity>();
public DocListView()
{
InitializeComponent();
LoadData();
}
private async void LoadData()
{
await Task.Run(() =>
{
_scecoBillDataScope.FetchData();
});
var collectionView = CollectionViewSource.GetDefaultView(_scecoBillDataScope.ScecoBills);
await Dispatcher.BeginInvoke(new ThreadStart(()=> LayoutRoot.DataContext = collectionView));
}
private void BbiRefresh_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
_scecoBillDataScope.Reset();
LoadData();
e.Handled = true;
}}
实际上,当我单击此行的“刷新”按钮时会出现错误**_scecoBillDataScope.FetchData();**请指教。
解决方案:
Your problem is this line:
await Dispatcher.BeginInvoke(new ThreadStart(()=> LayoutRoot.DataContext = collectionView));
You're just creating a new thread, you have to actually dispatch on the GUI thread:
Application.Current.Dispatcher.Invoke(() =>
{
LayoutRoot.DataContext = collectionView;
});