Я видел многие из этих типов вопросов, которые задавали и отвечали здесь, но ни один из них, похоже, не решил мою проблему.
У меня есть страница, которая извлекает и показывает список данных из базы данных. мой исходный код выглядел следующим образом
private void HistoryPage_OnLoaded(object sender, RoutedEventArgs e)
{
//''''''
_invoices = Invoice.GetAll(); // returns a list of invoices
InvoiceList = new PagingCollection<Invoice>(_invoices, _itemsPerPage);
DgInvoices.ItemsSource = InvoiceList.CurrentItems;
//'''''''''
}
это работало нормально, пока список данных не стал больше. сейчас эта операция занимает около 6-8 секунд. затем я попытался извлечь данные из другого потока и обновить там Datagrid (DGInvoices).
private void HistoryPage_OnLoaded(object sender, RoutedEventArgs e)
{
//''''''''
new Thread(() =>
{
_invoices = Invoice.GetAll();
InvoiceList = new PagingCollection<Invoice>(_invoices, _itemsPerPage);
DgInvoices.ItemsSource = InvoiceList.CurrentItems;
}).Start();
}
, который выдает это исключение
Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им
После поиска я нашел что Диспетчер - это способ go об этом. но я не могу заставить его работать.
private void HistoryPage_OnLoaded(object sender, RoutedEventArgs e)
{
//''''''''
new Thread(() =>
{
_invoices = Invoice.GetAll();
InvoiceList = new PagingCollection<Invoice>(_invoices, _itemsPerPage);
Dispatcher.Invoke(() =>
{
DgInvoices.ItemsSource = InvoiceList.CurrentItems;
});
}).Start();
}
это все еще вызывает вышеприведенное исключение.
Вы можете порекомендовать способ заставить это работать?