我有以下问题。我想捕获异常,如下所示,而不是我得到NullReferenceException。有没有办法捕获此匿名方法内部抛出的异常?
SynchronizationContext _debug_curr_ui = SynchronizationContext.Current;
_debug_curr_ui.Send(new SendOrPostCallback(delegate(object state) {
throw new Exception("RESONANCE CASCADE: GG-3883 hazardous material failure");
}),null);
我将不胜感激。
答案 0 :(得分:1)
您仍然可以在匿名方法中使用try/catch
:
_debug_curr_ui.Send(new SendOrPostCallback(delegate(object state) {
try
{
throw new Exception("RESONANCE CASCADE: GG-3883 hazardous material failure");
}
catch (Exception ex)
{
// TODO: do something useful with the exception
}
}), null);
作为替代方法,您可以修改此Send
方法并在调用委托之前捕获异常:
public void Send(SendOrPostCallback del)
{
// ...
try
{
del();
}
catch (Exception ex)
{
// TODO: do something useful with the exception
}
// ...
}
答案 1 :(得分:1)
我怀疑你得到NullReferenceException,因为_debug_curr_ui为null。
否则你应该能够包装你在try / catch块中发布的代码并捕获excpetion。您还应该考虑使用ApplicationException而不是Exception。
try
{
Action someMethod = delegate() { throw new ApplicationException("RESONANCE CASCADE: GG-3883 hazardous material failure"); };
someMethod();
}
catch
{
Console.WriteLine("ex caught");
}
答案 2 :(得分:0)
如果我理解正确,您希望匿名委托抛出异常,并且您希望在匿名委托之外的某处捕获此异常。
为了回答这个问题,我们需要知道你在委托中实际做了什么,以及如何调用它。或者,更具体地说,_debug_curr_ui.Send
方法对委托做了什么?
答案 3 :(得分:0)
如下所示
delegate(object obj)
{
try
{
}
catch(Exception ex)
{
}
}