Приложение WPF столкнулось с проблемой и должно закрыться, как получить хорошее сообщение? - PullRequest
1 голос
/ 13 июля 2011

В настоящее время я работаю над приложением WPF, которое обрабатывает данные в базе данных, и оно работало нормально, когда я тестировал его с тестовой базой данных, содержащей около 1000 строк, но теперь я хочу обработать около 50 000 строк, и это просто дает сбой во время обработкиПри выдаче мне «приложения» возникла проблема, и его необходимо закрыть ... Хотите отправить отчет об ошибке в Microsoft ... ".

Теперь это может показаться дубликатом пары других вопросов.но я попробовал AppDomain.CurrentDomain.UnhandledException, AppDomain.CurrentDomain.ProcessExit, Application.DispatcherUnhandledException, и он все равно вылетает без сообщения.

Вот как это выглядит:

private void OnStartup(object sender, StartupEventArgs e)
{
  AppDomain.CurrentDomain.UnhandledException += (s, args) =>
  {
    MessageBox.Show("Message1");
  };

  AppDomain.CurrentDomain.ProcessExit += (s, args) =>
  {
    MessageBox.Show("Message2");
  };

  this.DispatcherUnhandledException += (s, args) =>
  {
    MessageBox.Show("Message3");
  };

  try
  {
    Views.MainView view = new Views.MainView();
    view.DataContext = new ViewModels.MainViewModel();
    view.ShowDialog();
  }
  catch (Exception exception)
  {
    MessageBox.Show(exception.ToString());
  }
}

Обработка запускается командой (кнопка GUI с привязкой команды для вызова этого):

public void Process()
{
  Thread workerThread = new Thread(new ThreadStart(DoProcess));
  workerThread.IsBackground = true;
  workerThread.Start();
}

private void DoProcess()
{
  try
  {
    // Most probably crashes during that
    DoStuff();
  }
  catch (Exception e)
  {
    System.Windows.MessageBox.Show(e.ToString());
  }
}

Я проверил использование памяти во время выполнения, и оно никогда не превышает 70 мегабайт, так что это не должно бытьпроблема.Я использую 2 компонента COM, один из которых является .exe, а другой - DLL.Обратите внимание, что иногда эти компоненты выходят из строя, и я получаю полезное сообщение об ошибке, когда это происходит.Я работаю с NHibernate для чтения / записи из базы данных.

На данный момент я абсолютно не знаю, в чем проблема (часть DoStuff () довольно большая), и я не понимаю, как ошибка можетпройдите все эти обработчики исключений и просто завершите работу приложения без информации.Обратите внимание, что я не могу отладить приложение в Visual Studio, потому что я запускаю приложение на виртуальной машине, на которой не установлена ​​Visual Studio (и я ждал 2 месяца, чтобы мой ИТ-отдел установил мне сервер SQL, чтобыЯ могу запустить свое приложение на своем компьютере).

Любая помощь будет признательна!

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Ваша функция DoProcess находится в фоновом потоке. Может произойти сбой другого потока, или у вас может возникнуть проблема, вызывающая MessageBox из фонового потока, потому что это не поток пользовательского интерфейса - поэтому вы можете получить исключение, а затем новое исключение выдается из вашего перехвата из-за вызова MessageBox. Попробуйте вставить код, чтобы записать сообщение в файл перед вызовом MessageBox и посмотреть, работает ли он, или даже Console.Beep () в этом отношении, и прослушать его :-) Если это ничего не раскрывает, попробуйте добавить операторы журнала в файлы по адресу много мест в вашем коде, пока вы не сузите место возникновения сбоя.

0 голосов
/ 13 июля 2011

Вам действительно нужно настроить Visual Studio и настроить отладчик.Вы будете пробовать в темноте без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...