【发布时间】:2014-07-12 03:39:34
【问题描述】:
我有一个 WPF 项目,我需要将繁重的进程发送到另一个线程,然后获取结果并将其发送到主线程。昂贵的操作是从数据库中检索数据并用数据填充数据网格,然后将其发送到主线程以添加到网格中。我创建了一个线程,实例化并运行它:
Thread thread = new Thread(new ThreadStart(myHeavyProcess));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
这是我的方法:
private void myHeavyProcess()
{
DataGrid datagrd = new DataGrid();
//....
//populate the datagrid with data
//...
grdCharts.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)(() => grdCharts.Children.Add(datagrd )));
}
grdCharts 在主线程中创建,datagrd 在新线程中创建,最后一行我尝试使用 Dispatcher 将 datagrd 添加到 grdcharts,因为它来自一个不同的线程。
问题是,由于 grdCharts 在主线程中,而 datagrd 在新线程中,我如何将 datagrd 添加到 grdCharts ?或者一般来说,我们如何将一个 UIElement 从一个线程复制到另一个?
注意:我需要在另一个线程中填充数据网格,因为这是我所说的昂贵过程。
【问题讨论】:
-
已关闭。请参阅我在重复问题中的回答,了解如何在多线程场景中正确使用 WPF UI 功能。
标签: c# wpf multithreading datagrid