1

我必须渲染大约 10'000 个 wpf 控件,并且我不想在此操作期间冻结我的应用程序。是否有可能在另一个线程中做到这一点?

我试着用

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

以及 Dispatcher 的另一个变体。但它总是冻结我的应用程序。我想在创建一百个控件时显示动画等待屏幕,但它总是冻结,因为它是调度程序的线程。

感谢安德鲁的帮助。

4

1 回答 1

4

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

如果您有很多 UI 控件要创建并希望在创建过程中显示动画,那么您需要将要完成的工作分割成可以快速处理的小单元。然后,您可以BeginInvoke以低于正常的优先级调用以单独处理每个工作组单元。

您需要创建 10,000 个控件的事实是极端的,您可能应该研究虚拟化控件。

于 2013-04-28T19:15:00.147 回答