2011-07-20 61 views
3

有时在C#中我想抛出一个无法处理的异常。导致进程停止的升级异常。这可能吗?抛出异常停止进程

+0

为什么你不简单抛出异常并强制进程被关闭? –

回答

2

如何简单地关闭过程是这样的:

Process.GetCurrentProcess().Close(); 
2

如果您不想要处理异常,请不要处理它。

4

你可以这样做:

class BadassException : Exception 
{ 
    public BadassException(string message) 
    { 
    Environment.FailFast(message); 
    } 
} 

... 

throw new BadassException("Erk!!!"); 
+0

+1仅用于完全滥用throw语法。显然是一个坏的例外。 –

+0

我认为这是一个编码恐怖。例外不应该有任何逻辑埋入其中。抛出异常,然后由catch块根据异常的类型确定执行何种逻辑。抛出BadAss异常,但让catch块执行Environment.FailFast。 –

+0

@Jon Raynor:我同意你的看法,但是OP没有要求。我只是给了所要求的:) – leppie

2

这并不是一个例外,那就是原子弹。

尽管如此,有更好的方法来处理这种情况。如果您想终止您的流程,请查看Application.Exit等选项。

0

这不是真的可能,因为每个异常都必须从Exception基类继承,并且您可以执行catch(Exception)

但是,正如其他人指出的那样,您可能会很快失败。您也可以抛出,不能明确捕获的异常,像这样:

public class MyLibraryClass 
{ 
    private class MyException : Exception { ... } 

    public void MyMethod() { throw new MyException(); } 
} 

然后调用者不能做catch(MyException exc),只有catch(Exception exc)。但是,这意味着这个例外可以被捕获。

+0

CLR支持抛出不是'Exception'的对象。用一个小小的手推IL,你可以轻松地扔任何东西。 IIRC,那些只会被catch {}'抓住。 – leppie

0

任何未处理的异常都会停止您的应用程序。通常,应用程序具有应用程序或顶级异常处理程序,用于捕获任何未处理的异常,执行任何数据维护并正常关闭应用程序。

就你而言,我认为最好的方法是创建一个从异常类派生出来的新异常,称之为StopApplicationException。

然后每当你需要停止你的应用程序时,抛出这种类型的异常。在你的catch块进一步调用堆栈:

catch (StopApplicationException) 
{ 
    //Stop your application 
} 
catch (ArgumentNullException) 
{ 
    //Null Exception Logic goes here... 
} 
catch ...And so forth