2

デバッガーに問題があります。UI スレッドで障害のあるコードが実行されると、デバッガーは障害のある行を正しく指摘します。これはスレッド内で実行される場合と同じですが、ディスパッチャー内で呼び出されると奇妙な動作をします: TargetInvocationException がスローされます。分解中。

どうすれば適切に表示され、この迷惑なメッセージを回避できますか?

問題を説明する簡単な例を次に示します。

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        //navigator.NavigatToMenuAccueil(true);

        //Throws NullPointerException
        /*String x = null;
        String y = x.ToUpper();*/

        Thread th = new Thread(DoWork);
        th.Start();
    }

    private void DoWork()
    {
        //Throws NullPointerException
        /*String x = null;
        String y = x.ToUpper();*/

        Thread.Sleep(1000);
        Dispatcher.BeginInvoke(new Action(() =>
        {
            //Throws TargetInnvocationException 
            /*
            String x = null;
            String y = x.ToUpper();
             */

            MyTextBlock.Text = "My New Text";
        }));            

    }
4

1 に答える 1

2

TargetInvocationExceptionは、リフレクションによって呼び出されたメソッドによってスローされる例外です ( MSDNによると) 。 BeginInvokeDispatcher

渡されたデリゲート内でスローされる例外は、TargetInvocationException. Dispatcher が元の例外をラップするのを防ぐことはできません。ただし、アクセスすることで元の例外を取得できInnerExceptionます。

于 2013-03-14T13:56:58.317 に答える