.net - 在不同线程中创建 WPF 窗口时出现异常

标签 .net wpf multithreading dispatcher

我有一个 WPF 应用程序,我在不同的线程中运行一些动画,所以我的主 UI 线程将响应。我正在使用发布的代码 here :

Thread thread = new Thread(() =>
{
    Window1 w = new Window1();
    w.Show();

    w.Closed += (sender2, e2) => w.Dispatcher.InvokeShutdown();

    System.Windows.Threading.Dispatcher.Run();
});

thread.IsBackground = true;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

它通常工作正常,但在系统部署后,我收到有关应用程序崩溃的投诉,并显示以下堆栈跟踪:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Collections.Generic.List`1.RemoveAt(Int32 index)
   at System.IO.Packaging.PackagePart.CleanUpRequestedStreamsList()
   at System.IO.Packaging.PackagePart.GetStream(FileMode mode, FileAccess access)
   at System.IO.Packaging.PackagePart.GetStream()
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)   
   at Window1.xaml:line 1   
   at Window1..ctor()

有没有人以前见过这个异常并且可以解释那里发生了什么?这个特定异常(exception)的原因可能是什么?
我正在使用 .Net 3.5 SP1

最佳答案

它看起来像 System.Windows.Application.LoadComponent 不是线程安全的,因此您对 Window 构造函数的调用可能会导致错误。

您可以尝试在主线程中创建窗口实例并仅在新线程中显示它,但我不确定这是否适合您的应用程序需求。

关于.net - 在不同线程中创建 WPF 窗口时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085811/

相关文章:

c# - 在同一项目(SQL Server 和 MySql)中使用具有多个数据库和提供程序的 Entity Framework

c# - 部分类(class)的目的是什么?

c# - 针对列表的多个搜索关键字

c# - 多层如何在MVVM模式中工作?

java - 改进类的多个实例访问同一类中多个同步函数的工作流程

c# - 调用 'ShutdownBlockReasonCreate'函数不能阻止用户关闭系统

c# - 为什么在安装 Visual Studio 2008 后,catch(TException) 处理 block 行为在调试器下有所不同?

multithreading - 为什么 netty 每个套接字共享相同的线程进行读写?

c# - 将 View 更新为 WPF 中的数据集

c++ - 通过引用传递 vector 然后调用清除