5

私はこのコードを持っています:

using System;
using System.Runtime.Remoting.Messaging;

class Program {
    static void Main(string[] args) {
        new Program().Run();
        Console.ReadLine();
    }

    void Run() {
        Action example = new Action(threaded);
        IAsyncResult ia = example.BeginInvoke(new AsyncCallback(completed), null);
        // Option #1:
        /*
        ia.AsyncWaitHandle.WaitOne();
        try {
          example.EndInvoke(ia);
        }
        catch (Exception ex) {
          Console.WriteLine(ex.Message);
        }
        */
    }

    void threaded() {
        throw new ApplicationException("Kaboom");
    }

    void completed(IAsyncResult ar) {
        // Option #2:
        Action example = (ar as AsyncResult).AsyncDelegate as Action;
        try {
            example.EndInvoke(ar);
        }
        catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
}

多くの記事では、私が呼び出すとBeginInvoke、すべてExceptionのs(ここではメソッドからthreaded)は私が呼び出すまで待機し、EndInvokeそこにスローされます。しかし、それは機能せず、Exception( "Kaboom")は "未処理"であり、プログラムがクラッシュします。手伝って頂けますか?

ありがとう!

4

1 に答える 1

4

それはうまくいきます。「そしてプログラムがクラッシュする」と言うとき、IDEがすべての例外でブレークするように設定されているだけなのかどうか疑問に思います。クラッシュすることはありません。予想どおり、コンソールに「Kaboom」と書き込まれます。IDEの外部で実行するか、単に。の代わりにctrl+を押してみてください。f5f5

IDEが「役立つ」のを見ているだけだと思います。

ここに画像の説明を入力してください

それを無視してください。IDEが常に正しく機能するとは限りません。それはまだ処理されます。

于 2012-08-09T11:45:15.317 に答える