【问题标题】:WPF Dispatcher Thread- Using lambda expression and throw to dispatch exception to UI threadWPF Dispatcher Thread-使用 lambda 表达式和 throw 将异常分派到 UI 线程
【发布时间】:2012-01-10 10:02:43
【问题描述】:
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 所建议的那样

标签: c# multithreading delegates lambda throw


【解决方案1】:

为什么不直接创建一个新的异常,将旧异常作为 InnerException?

e => throw new WhateverException("your message", ex);

这会保留原始堆栈跟踪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2015-09-06
    • 1970-01-01
    相关资源
    最近更新 更多