Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在后台线程中创建wpf控件_C#_Wpf_Multithreading - Fatal编程技术网

C# 在后台线程中创建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个控件时显示动画等待

我必须渲染大约10000个wpf控件,我不想在这个操作期间冻结我的应用程序。可以在另一个线程中执行吗

我试着用

    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,上面的链接已经死了。