2015-04-07 2 views
0

В последнее время мы сталкиваемся с проблемой сбоя в нашем приложении (не на регулярной основе, как правило, на стороне клиента), и мы не можем отслеживать причину ошибки. Большая часть времени, ошибки, которые мы получаем из журнала что-то вроде этого ..Проблема сбоя приложения в приложении WPF в архитектуре MVVM


Type : System.IndexOutOfRangeException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
Message : Index was outside the bounds of the array. 
Source : mscorlib 
Help link : 
Data : System.Collections.ListDictionaryInternal 
TargetSite : Void Add(T) 
HResult : -2146233080 
Stack Trace : at System.Collections.Generic.List`1.Add(T item) 

System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e) 
    at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg) 
    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

Также для того, чтобы справиться с аварией на уровне приложения, мы написали определенный код в файле App.xaml.cs т.е.

private void CurrentDomain_UnhandledException(object sender, 
                UnhandledExceptionEventArgs e) 
    { 
     try 
     { 
      var exception = (Exception) e.ExceptionObject; 
      ExceptionHandler.HandleException(exception); 
      WpfMessageBox.Show(LocalizationManager.GetValue("AppErrorUnhandledException").ToString(), 
           LocalizationManager.GetValue("AppErrorUnhandledException").ToString(), 
           WpfMessageBoxButtons.OK, 
           WpfMessageBoxIcon.Error); 
     } 

Есть ли что-то, что нам нужно сделать помимо этого, чтобы остановить приложение внезапно?

Примечание: Наше приложение основано на MVVM модели, концепции, такие как службы фасада, единство, оркестровки сервисов, MutiThreading (Использование фона для вызова службы асинхр)

PS: Обычно, как в журналах, мы получают эту ошибку при кэшировании данных.

+0

сва исключение indexOut, там не может быть любым обходным путем, кроме вас, его обработки, специально или фиксируя его – Muds

+4

Глядя на StackTrace, Похоже, вы обращаетесь к '' List в нескольких потоках без правильная синхронизация. Вам нужно синхронизировать доступ. –

ответ

0

Ваше CurrentDomain_UnhandledException будет обрабатывать исключения из Dispatcher, потока пользовательского интерфейса. BackgroundWorker - это другой поток, любое исключение в этом потоке не обрабатывается диспетчером, и ваша система выходит из строя.

Вы должны обрабатывать IndexOutOfRangeException внутри правильной нити, фоновой.

нг-HT

Смежные вопросы