在后台线程中创建wpf控件

时间:2013-04-28 19:08:04

标签: c# wpf multithreading

我必须渲染大约10,000个wpf控件,我不想在此操作期间冻结我的应用程序。是否可以在另一个线程中执行此操作?

我尝试使用

    myStackPanel.Dispatcher.BeginInvoke(
    System.Windows.Threading.DispatcherPriority.SystemIdle, 
    new NextPrimeDelegate(this.AddButton));

和Dispatcher的另一种变体。但它总是冻结我的申请。我想在创建100个控件期间显示动画等待屏幕,但它总是冻结,因为它是调度程序的线程。

感谢您的帮助 安德鲁。

1 个答案:

答案 0 :(得分:4)

必须在与调度程序关联的线程上创建WPF控件。对Dispatcher.BeginInvoke的调用会调度指定的操作,以便稍后在调度程序线程上运行,而不是在后台线程上运行。

如果要创建许多UI控件并希望在创建过程中显示动画,则需要将要完成的工作分段为可以快速处理的小单元。然后,您可以以低于正常水平的优先级呼叫BeginInvoke,以单独处理每个工作单位。

您需要创建10,000个控件的事实是极端的,您应该调查虚拟化控件。