Когда это происходит Необработанное исключение типа "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));
}