我想在WPF中以C#代码编程制作网格元素,并且因为它需要大量处理,所以我使用了一个线程。
"调用线程无法访问此对象,因为不同 线程拥有它。"
我的代码就是这样:
PrepareGrid gridMaker = new PrepareGrid();
Thread fetchGrid = new Thread(() => {
GridContainer.Dispacher.Invoke(() => GridContainer.Content = gridMaker.getGrid());
});
fetchGrid.SetApartmentState(ApartmentState.STA);
fetchGrid.Start();
PrepareGrid
是准备网格的类,其getGrid
的方法返回结果网格,GridContainer
是WPF滚动查看器
我使用了嵌套调度员,但它不起作用
为什么我不能将Task
用于WPF元素?制作网格的过程是如此巨大,Thread
仅使用一个处理器的一个核心
在WPF中,您可以具有多个UI线程,但是必须在其创建的线程上使用UI元素。您在另一个线程中创建它,对吗?因此,您无法在默认UI线程中使用它。
我怀疑"巨大的处理"根本不是来自实际UI对象的创建。确切找出"巨大的处理"所包含的内容,然后将其放在另一个线程上。或将其他线程创建实际控件或控件时,将其调用到主UI线程中。