请教:如何使异常不抛出到外层try...catch?
例如:
//外层
try
{
    //内层
    try
    {
        //语句a,引发异常
    }
    catch (Exception ex)
    {
        //语句a引发的异常在此处理,不再向外层try...catch抛出
    }
}
catch (Exception ex)
{
    //不捕获语句a引发的异常
}

解决方案 »

  1.   

    只要在内层异常catch以后,不再throw 出来就可以了!
      

  2.   

    你这样的写法只要不在内部catch中手动throw或者catch中执行的代码有异常的话,就不会抛出到外层的try块了。
      

  3.   

    另外如果不是.NET所支持的异常类,那么就有可能直接应用程序崩溃,无法捕获并执行下去。
    比如一个属性的递归查找,子属性可访问父对象,导致了一个死循环,这在编译时是发现不了的,一旦执行,就会发生无法捕获的异常,直接应用程序崩溃。
      

  4.   

    我目前的情况如下:func a()
    {
        try
        {
            b();
        }
        catch (Exception ex)   //此处会所获到来自func b()的异常
        { }
    }func b()
    {
        try
        {
            Thread.CurrentThread.Abort();   //此处抛出异常
        }
        catch (Exception ex)
        { }
    }是不是Thread.CurrentThread.Abort()抛出的异常需要特殊处理?
      

  5.   

    Thread.CurrentThread.Abort(); 
    换成:
    return;
      

  6.   


    这样吗:func b()
    {
    try
    {
        Thread.CurrentThread.Abort();
    }
    catch (System.Threading.ThreadAbortException tae)
    { }
    }这样没作用的
      

  7.   

    注册Application.ThreadException,在这里处理试试。
      

  8.   

    try
    {
      //内层
      try
      {
      //语句a,引发异常
      }
      catch (Exception ex)
      {
        throw; 
      }
    }下面可以这样写
    catch (Exception ex)
    {
      //不捕获语句a引发的异常
    }也可以这样写
    finally
    {}
      

  9.   


    是这样吗?public void OnThreadException(object sender, ThreadExceptionEventArgs t)
    {
        return;
    }……
    func b()
    {
    System.Windows.Forms.Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException);
    try
    {
        Thread.CurrentThread.Abort();
    }
    catch (System.Threading.ThreadAbortException tae)
    { }
    }这样也是没效果的
      

  10.   


    catch {}尝试 里面的catch 不带参数。
      

  11.   

    几个可以避免的错误:一、用异常来控制程序流程。
    异常是用来对付编程时没有办法预测的状况的,不是用来控制程序流程的。
    控制流程可以用变量,返回值等。
    比如把Thread.CurrentThread.Abort();  换成 
    this.StopWorker = true;
    return;二、Thread.Abort
    在绝大部分情况下,Thread.Abort用了就等同于错误(例外的情况:比如在运行别人提供的dll中的线程,才有可能适当使用)。三、理解ThreadAbortException
    ThreadAbortException(MSDN帮助)是个特殊的异常,可以捕获但会自动重抛。除非显式地调用Thread.ResetAbort();