C# 在后台线程中创建wpf控件
我必须渲染大约10000个wpf控件,我不想在这个操作期间冻结我的应用程序。可以在另一个线程中执行吗 我试着用C# 在后台线程中创建wpf控件,c#,wpf,multithreading,C#,Wpf,Multithreading,我必须渲染大约10000个wpf控件,我不想在这个操作期间冻结我的应用程序。可以在另一个线程中执行吗 我试着用 myStackPanel.Dispatcher.BeginInvoke( System.Windows.Threading.DispatcherPriority.SystemIdle, new NextPrimeDelegate(this.AddButton)); 和Dispatcher的另一个变体。但它总是冻结我的申请。我想在创建100个控件时显示动画等待
myStackPanel.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.SystemIdle,
new NextPrimeDelegate(this.AddButton));
和Dispatcher的另一个变体。但它总是冻结我的申请。我想在创建100个控件时显示动画等待屏幕,但它总是冻结,因为它是调度程序的线程
谢谢你的帮助
Andrew。必须在与要显示WPF控件的dispatcher关联的线程上创建WPF控件。调用
Dispatcher.BeginInvoke
将指定的操作安排在以后在Dispatcher线程上运行,而不是在后台线程上运行
如果要创建大量UI控件,并且希望在创建期间显示动画,则需要将要完成的工作分割为可以快速处理的小单元。然后,您可以以低于正常优先级的优先级调用BeginInvoke
,以单独处理工作组的每个单元
您需要创建10000个控件这一事实是极端的,您可能应该研究如何虚拟化这些控件。WPF控件必须在与将显示它们的dispatcher关联的线程上创建。调用
Dispatcher.BeginInvoke
将指定的操作安排在以后在Dispatcher线程上运行,而不是在后台线程上运行
如果要创建大量UI控件,并且希望在创建期间显示动画,则需要将要完成的工作分割为可以快速处理的小单元。然后,您可以以低于正常优先级的优先级调用BeginInvoke
,以单独处理工作组的每个单元
您需要创建10000个控件这一事实是极端的,您可能应该研究虚拟化控件。我认为您无法在不同的线程上创建控件。所有WPF元素初始化都应该在主STA线程上。但是为什么要创建这么多控件呢?对于这种情况,您应该使用某种UI虚拟化。请详细说明为什么必须创建10.000个控件。我认为应该有其他选择。如果这篇文章对你有帮助,也请检查一下:@MareInfinitus,上面的链接已经死了。我认为你不能在不同的线程上创建控件。所有WPF元素初始化都应该在主STA线程上。但是为什么要创建这么多控件呢?对于这种情况,您应该使用某种UI虚拟化。请详细说明为什么必须创建10.000个控件。我认为应该有其他选择。如果这篇文章对你有帮助,也请检查一下:@MareInfinitus,上面的链接已经死了。