Когда это происходит Необработанное исключение типа "System.Reflection.TargetInvocationException" произошло в System.Windows.ni.dll "inWindows Phone"
Создаем приложение WP8
, которое использует Web Service
для извлечения, создания, обновления и удаления данных и их отображения.
Теперь проблема в том, что мое приложение вылетает, бросая
Необработанное исключение типа "System.Reflection.TargetInvocationException" произошло в System.Windows.ni.dll "inWindows Phone
![enter image description here]()
Для этого исключения нет трассировки стека, и я застрял в этом часе. И я заметил, что это исключение возникает при вызове службы чаще, чем обычно, но я не получил реальной причины.
Очень полезно знать
1.Какой тип исключения это?
2. В каком состоянии это произойдет?
3. Как мы можем справиться с сбоем приложения из-за этого исключения?
Ответы
Ответ 1
Ваш комментарий
Вы правы. gotta внутренний объект исключения говорит: "В MyApp.ViewModels.CreateViewModel.d__61.MoveNext() --- Конец трассировки стека из предыдущего места, где было выбрано исключение - в System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__0 (состояние объекта)" Сообщение: ссылка на объект не установлена в экземпляр объекта.
просто показывает, что где-то вы вызываете асинхронный метод, который не ожидается: , когда метод возвращает задачу, всегда его ждет.
Ваше внутреннее исключение должно иметь внутреннее исключение (то есть $exception.InnerException.InnerException, в котором stacktrace покажет вам местоположение вашего исключения NullReferenceException)
Событие UnhandledException вызывается, когда исключение в коде не обрабатывается вашим кодом, и приложение не знает, как его обрабатывать.
По умолчанию это приводит к сбою приложения.
Тем не менее, вы можете предотвратить сбой приложения в этих случаях. Смотрите этот, чтобы узнать больше об этом.
Чтобы устранить проблему "чистый путь", вам нужно будет найти место, где ваш код не ожидается, и исправить его. т.е. где-то вы найдете:
myObject.DoSomethingAsync(); // DoSomethingAsync() returns a task.
Измените его:
try
{
await myObject.DoSomethingAsync(); // DoSomethingAsync() returns a task.
}catch(Exception ex)
{
// display error message or whatever
}
[edit], это обработает ошибку, но то, что вы действительно хотите исправить, является причиной вашего исключения nullref. У меня нет таких подсказок, но это выглядит как проблема с потоком concurrency.
Ответ 2
1. Какой тип исключения это?
это исключение произойдет, когда вы пытаетесь получить доступ к w/s, и он будет перегружен.
2. Какое условие это произойдет?
Бизнес-логика сложна или блокирована db или не отвечает
3. Как мы можем справиться с сбоем приложения из-за этого исключения?
чтобы справиться с этим. Я рекомендую улучшить производительность этого w/s или использовать рекурсивный вызов, но он не решит проблему, я думаю
Ответ 3
Или InvokeRequired при использовании Task
delegate void SetDataSourceHandler(DataTable data);
public void SetDataSource(dDataTable data)
{
if (gvData.InvokeRequired)
{
gvData.Invoke(new SetDataSourceHandler(SetDataSource), new object[] { data });
return;
}
nodosDataTableBindingSource.DataSource = data;
}
async Task ProcesarMensajes()
{
...
SetDataSource( GetList(nodes));
}