web-dev-qa-db-ja.com

発生する場合Windows Phoneの「System.Reflection.TargetInvocationException」タイプの未処理の例外がSystem.Windows.ni.dllで発生しました

WP8を使用してデータを取得、作成、更新、削除し、表示するWeb Serviceアプリケーションを作成しています。
問題は、投げることによってアプリケーションがクラッシュすることです

Windows Phoneの「System.Reflection.TargetInvocationException」タイプの未処理の例外がSystem.Windows.ni.dllで発生しました

enter image description here

この例外のスタックトレースはありません。何時間もスタックしています。そして、通常よりも頻繁にサービスを呼び出すたびにこの例外が発生することに気付きましたが、実際の理由はわかりませんでした。

知っておくと本当に助かります
1。これはどんな種類の例外ですか?
2。これはどのような状況で発生しますか?
3。この例外によるアプリクラッシュの処理方法

12
asitis

あなたのコメント

あなたが正しいです 。内部例外オブジェクトに「MyApp.ViewModels.CreateViewModel.d__61.MoveNext()---例外がスローされた前の場所からのスタックトレースの終了--- System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__0(Object state) "メッセージ:オブジェクトの参照がオブジェクトのインスタンスに設定されていません。

どこかに、待機していない非同期メソッドを呼び出していることを示しています:メソッドがタスクを返すときは、常に待機します。

内部例外には内部例外が必要です(つまり、$ exception.InnerException.InnerException(スタックトレースはNullReferenceExceptionの場所を表示します))

UnhandledExceptionイベントは、コード内の例外がコードによって処理されておらず、アプリがそれを処理する方法を知らないときに呼び出されます。デフォルトでは、アプリがクラッシュします。ただし、これらの場合にアプリがクラッシュするのを防ぐことができます。詳細については this を参照してください。

「クリーンな方法」で問題を解決するには、コードが待たれていない場所を見つけて修正する必要があります。すなわち、あなたが見つけるだろうどこか:

myObject.DoSomethingAsync(); // DoSomethingAsync() returns a task.

それを変更 :

try
{
   await myObject.DoSomethingAsync(); // DoSomethingAsync() returns a task.
}catch(Exception ex)
{
   // display error message or whatever
}

[編集]これはエラーを処理しますが、本当に修正したいのはnullref例外の原因です。そんな手がかりはありませんが、スレッドの並行性の問題のようです。

14
Olivier

1.これはどんな種類の例外ですか?

この例外は、w/sにアクセスしようとすると発生し、過負荷になります。

2.これはどのような条件で起こりますか?

ビジネスロジックが複雑か、dbロックまたは無応答

3.この例外によるアプリのクラッシュをどのように処理できますか?

それを処理するには、そのw/sのパフォーマンスを改善するか、再帰呼び出しを使用することをお勧めしますが、私は思う問題を解決しません

3
techloverr

またはタスクを使用する場合はInvokeRequired

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));
}
0
Carlos