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,所有Exceptions (这里来自 method threaded)等到我调用EndInvoke并将被扔到那里。但它不起作用,Exception(“Kaboom”)“未处理”并且程序崩溃。你能帮助我吗?

谢谢!

4

1 回答 1

4

这很好用。当您说“程序崩溃”时,我想知道您是否只是将 IDE 设置为中断所有异常。我不会因此而崩溃 - 正如我们所期望的那样,它会将“Kaboom”写入控制台。尝试在 IDE 之外运行它或按ctrl+f5而不是f5.

我认为您只是看到 IDE “有用”:

在此处输入图像描述

忽略它;IDE 并不总是正确的。那还是要处理的。

于 2012-08-09T11:45:15.317 回答