BeginInvoke外层添加try可以捕捉到BeginInvoke内部的异常?

private void ControlRemoved(object sender, ControlEventArgs e)
        {
            try
            {
                this.BeginInvoke(new Action(() =>
                {
                   
                }));                
            }
            catch (Exception ex)
            {
                LogManager.WriteError("ControlRemoved()", ex.StackTrace.ToString());
            }
        }

上述代码在BeginInvoke外层添加try可以捕捉到BeginInvoke内部的异常么

BeginInvoke 方法是异步执行的,这意味着它会在另一个线程上执行指定的委托。因此,尽管 BeginInvoke 本身可能不会抛出异常(除非发生诸如内存不足之类的系统级异常),但在 BeginInvoke 中传递的方法可能会在另一个线程上抛出异常。

在你的代码中,传递给 BeginInvoke 的方法内部的异常将不会被外部的 try-catch 块捕获。因此,如果你想要捕获 BeginInvoke 内部的异常,你应该在传递给 BeginInvoke 的方法内部包装一个 try-catch 块,如下所示:

this.BeginInvoke(new Action(() =>
{
    try
    {
        // your code here...
    }
    catch (Exception ex)
    {
        LogManager.WriteError("Exception occurred inside BeginInvoke", ex.StackTrace.ToString());
    }
}));

你可能感兴趣的:(c#,c#)