我有一个DataGrid,使用DataContext填充DataView。我尝试在单独的线程中执行此操作,但UI仍然会冻结。我想在填充DataGrid时防止UI冻结。
这是我迄今为止编写的代码:
private void btnOK_Click(object sender, RoutedEventArgs e)
{
GetFieldsBLL getFieldsBLL = new GetFieldsBLL();
DataView dv = getFieldsBLL.GetWholeView(ViewName);
Task task = new Task(() => ucDataExtracViewControl.PopulateGrid(dv));
task.Start();
}
public void PopulateGrid(DataView dv)
{
dgView.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(delegate{
dgView.Columns.Clear();
dgView.AutoGenerateColumns = false;
foreach (DataColumn column in dv.Table.Columns)
{
var gridColumn = new DataGridTextColumn()
{
Header = column.ColumnName,
Binding = new Binding("[" + column.ColumnName + "]")
};
dgView.Columns.Add(gridColumn);
}
dgView.DataContext = dv;
DataView = dv;
}));
}
提前致谢!
编辑: 我重新创建列的原因是因为一些列名中含有句点。例如,“Job No.”在使用绑定时不会产生任何数据。在此阅读更多信息:为什么DataTable列名中含有句点会使它们不适用于WPF的DataGrid控件? 不可能对数据库进行更改。