3
我有一個WPF應用程序,並且在不同的線程中運行一些動畫,所以我的主UI線程將會響應。我正在使用的代碼發佈here:在另一個線程中創建WPF窗口時出現異常
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()
有沒有人見過這個例外之前,可以解釋那裏發生了什麼?什麼可能是這個具體例外的原因?
我正在使用.Net 3.5 SP1
聽起來像一個解決方案:-)你有任何額外的參考備份這個假設?我無法測試它,因爲它只發生過一次... – 2012-04-10 13:33:13
不,這只是一個想法。你可以看看System.Windows.Application.LoadComponent的代碼來找到那裏的線程安全問題。或者你可以嘗試用測試來強調測試LoadComponent,在不同的線程上同時創建多個窗口來重現此bug – Nikolay 2012-04-10 14:57:39
好的,謝謝。我會看看它 - 我鼓勵你,並且會接受這個答案,當我確定它是我所遇到的異常的真正根源。 – 2012-04-12 12:16:40