我在这里已经看到许多这类问题的答案,但似乎都不能解决我的问题。
我有一个页面可以检索并显示数据库中的数据列表。我的初始代码看起来像这样
private void HistoryPage_OnLoaded(object sender, RoutedEventArgs e)
{
//''''''
_invoices = Invoice.GetAll(); // returns a list of invoices
DgInvoices.ItemsSource = _invoices;
//'''''''''
}
这正常,直到数据列表变大。现在此操作大约需要6-8秒。然后我尝试从另一个线程获取数据并从那里更新Datagrid(DGInvoices)。
private void HistoryPage_OnLoaded(object sender, RoutedEventArgs e)
{
//''''''''
new Thread(() =>
{
_invoices = Invoice.GetAll();
DgInvoices.ItemsSource = _invoices;
}).Start();
}
引发此异常
调用线程无法访问此对象,因为其他线程拥有它
经过搜索后,我发现分派器是解决此问题的方法。但我无法使其正常工作。
private void HistoryPage_OnLoaded(object sender, RoutedEventArgs e)
{
//''''''''
new Thread(() =>
{
_invoices = Invoice.GetAll();
Dispatcher.Invoke(() =>
{
DgInvoices.ItemsSource = InvoiceList.CurrentItems;
});
}).Start();
}
这仍然会引发上述异常。
您能推荐一种使此工作正常进行的方法吗?
您为什么在新线程中使用Dispatcher?
您可以在新线程之外简单地使用Dipatcher。
喜欢这个:
Dispatcher.Invoke(() =>
{
DgInvoices.ItemsSource = InvoiceList.CurrentItems;
});
因此您可以在主线程上调用,而不能在新线程上调用