我无法弄清楚为什么会这样。将 DataGrid 绑定到 DataTable.DefaultView 会导致应用程序挂起。我想显示已解析并放置在 DataTable 中的 CSV 文件的内容。这种使用 backgroundWorker 的方法在 WinForms 中取得了成功,并且这个 WPF 应用程序是一个用于学习 WPF 的小型导入实用程序的简单移植。这是 XAML
<DataGrid x:Name="detailGrid" AutoGenerateColumns="True" />
这是背后的代码:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
}
else if (e.Cancelled)
{
}
else
{
DataTable T = (e.Result as DataTable);
// verified in immediate window that T.Rows.Count = 80106 at this point
this.detailGrid.ItemsSource = T.DefaultView;
}
我的理解是 RunWorkerCompleted 事件是在 UI 线程上引发的,所以这里不需要 Dispatcher.Invoke(new Action() ... 。