У меня есть приложение WPF, и я запускаю анимацию в другом потоке, поэтому мой основной поток пользовательского интерфейса будет реагировать. Я использую код отправил 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
Звучит как решение :-) Есть ли у вас дополнительная ссылка на резервное копирование этого предположения? У меня нет возможности проверить это, так как это произошло только один раз в поле ... –
Нет, это всего лишь идея. Вы можете посмотреть код System.Windows.Application.LoadComponent, чтобы найти там проблемы безопасности потоков. Или вы можете попытаться подчеркнуть тест LoadComponent с тестом, который создает много окон одновременно на разных потоках, чтобы воспроизвести эту ошибку. – Nikolay
Хорошо, спасибо. Я посмотрю на это - я поддержал вас и приму этот ответ, когда я буду уверен, что это настоящая первопричина исключения, которое у меня было. –