我有这段代码:
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")是未经处理的"程序崩溃了。
你能救我吗?
谢谢!
答案 0 :(得分:4)
工作正常。当你说“和程序崩溃”时,我想知道你是否只是将IDE设置为中断所有异常。我没有崩溃 - 它正如我们所期望的那样将“Kaboom”写入控制台。尝试在IDE外部运行它或按 ctrl + f5 而不是 f5 。
我认为您只是看到IDE“有帮助”:
忽略这一点; IDE并不总是正确的。这仍然是处理。