我必须渲染大约10,000个wpf控件,我不想在此操作期间冻结我的应用程序。是否可以在另一个线程中执行此操作?
我尝试使用
myStackPanel.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.SystemIdle,
new NextPrimeDelegate(this.AddButton));
和Dispatcher的另一种变体。但它总是冻结我的申请。我想在创建100个控件期间显示动画等待屏幕,但它总是冻结,因为它是调度程序的线程。
感谢您的帮助 安德鲁。
答案 0 :(得分:4)
必须在与调度程序关联的线程上创建WPF控件。对Dispatcher.BeginInvoke
的调用会调度指定的操作,以便稍后在调度程序线程上运行,而不是在后台线程上运行。
如果要创建许多UI控件并希望在创建过程中显示动画,则需要将要完成的工作分段为可以快速处理的小单元。然后,您可以以低于正常水平的优先级呼叫BeginInvoke
,以单独处理每个工作单位。
您需要创建10,000个控件的事实是极端的,您应该调查虚拟化控件。