WPF调度线程-使用lambda表达式和throw到UI线程分派异常

3
try
{
    string s = null;
    s.PadLeft(10);
}
catch (Exception ex)
{
    // send exception to UI Thread so it can be handled by our global exception 
    // handler
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Send, 
        new Action<Exception>(e => { throw ex; }), ex);
}

如您所见,'throw ex' 会截断堆栈跟踪,我想使用 throw 而不是 throw ex,但是我会得到以下错误信息:

在 catch 子句之外不允许使用没有参数的 throw 语句。

如何使用 lambda 表达式抛出异常而不截断堆栈跟踪?

我认为这是因为throw是一个语句而不是表达式,所以你必须引发一个新的异常并将现有的异常作为内部异常传递,就像Botz在下面建议的那样。 - sll
1个回答

2
为什么不直接创建一个新的异常,并将旧的异常作为InnerException传递进去呢?
e => throw new WhateverException("your message", ex);

这会保留原始的堆栈跟踪信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接