Вот странная проблема, с которой я сталкиваюсь с приложением Windows 8.1 XAML.Windows 8.1 Сбой приложений XAML, несмотря на обработку ошибок
Ошибка в элементах управления DevExpress приводит к сбою всего приложения, несмотря на мою реализацию обработки исключений. Разработчики DevExpress реплицировали эту конкретную ошибку и работают над решением - этот вопрос касается сбоя, несмотря на обработку ошибок и НЕ о ошибке DevExpress.
Уникальная вещь об этой аварии в том, что он ломает на этой линии в автоматическом сгенерированный код в App.g.i.cs
(в отличие от других исключений быть брошенными в других местах):
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
};
#endif
Кажется, это срабатывает когда в механизмах, связанных с XAML, происходит какое-то исключение/сбой (но это только дикая догадка с моей стороны) ... Я не думаю, что приведенный выше код отвечает за эффект «сбой на рабочий стол», но он делает похоже, является симптомом.
Мой собственный код для обработки ошибок (в App.xaml.cs
):
public App()
{
//...
this.UnhandledException += App_UnhandledException;
//...
}
private async void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var ex = e.Exception;
e.Handled = true;
Logger.LoggingError(ex);
await Controls.MessageDialog.Show(ex.Message, Controls.MessageDialog.DialogType.Error, Controls.MessageDialog.DialogButtons.Retry, ElementTheme.Light);
var frame = Window.Current.Content as Frame;
frame.Navigate(typeof(Views.SplashLoading));
}
Регулируя попытки ошибки:
- войти ошибка
- дисплей ошибка
- вернуться к начальный вид
Опять же - это в целом работает очень хорошо для всех других целей. Но если когда-либо точка останова в App.g.i.cs
будет запущена (или будет запущена, если приложение будет выпущено на клиентских машинах), то моя обработка ошибок завершится неудачно.
Отметьте, что это не относится к элементам управления DevExpress. Просто управление DevExpress вызывает это поведение таким образом, чтобы его можно было реплицировать. Опять же - если исключение приведет к запуску кода в App.g.i.cs
, то, похоже, нет сохранения приложения.
Что я могу сделать, чтобы убедиться, что приложение продолжает работать, когда это неудачное событие происходит и не вылетает на рабочий стол?
EDIT:
Для справки, это сообщение об ошибке, которое происходит при использовании DevExpress
управления:
System.ArgumentException: The parameter is incorrect.
The value cannot be infinite or Not a Number (NaN).
at Windows.UI.Xaml.Controls.ScrollViewer.ChangeView(Nullable`1 horizontalOffset, Nullable`1 verticalOffset, Nullable`1 zoomFactor, Boolean disableAnimation)
at DevExpress.Core.Native.DXVirtualizingPanel.ScrollElementIntoView(Double elementOffset, Double rowHeight)
at DevExpress.Core.Native.DXVirtualizingPanel.ScrollIntoView(Int32 visibleIndex)
at DevExpress.UI.Xaml.Grid.DataControlBas
К сожалению, это полное сообщение - оно появляется полный стек след отсутствует.
Какое фактическое сообщение об ошибке? – Barptad
@Barptad Я добавил сообщение об исключении для элементов управления DevExpress. Я не думаю, что это имеет значение ... – Shaamaan
Можете ли вы уточнить свой вопрос? Вы боитесь, что обработчик событий из 'App.g.i.cs' будет запущен в версии выпуска на устройстве конечного пользователя? – Alex