有时在C#中我想抛出一个无法处理的异常。导致进程停止的升级异常。这可能吗?抛出异常停止进程
抛出异常停止进程
回答
如何简单地关闭过程是这样的:
Process.GetCurrentProcess().Close();
如果您不想要处理异常,请不要处理它。
你可以这样做:
class BadassException : Exception
{
public BadassException(string message)
{
Environment.FailFast(message);
}
}
...
throw new BadassException("Erk!!!");
+1仅用于完全滥用throw语法。显然是一个坏的例外。 –
我认为这是一个编码恐怖。例外不应该有任何逻辑埋入其中。抛出异常,然后由catch块根据异常的类型确定执行何种逻辑。抛出BadAss异常,但让catch块执行Environment.FailFast。 –
@Jon Raynor:我同意你的看法,但是OP没有要求。我只是给了所要求的:) – leppie
这并不是一个例外,那就是原子弹。
尽管如此,有更好的方法来处理这种情况。如果您想终止您的流程,请查看Application.Exit等选项。
这不是真的可能,因为每个异常都必须从Exception
基类继承,并且您可以执行catch(Exception)
。
但是,正如其他人指出的那样,您可能会很快失败。您也可以抛出,不能明确捕获的异常,像这样:
public class MyLibraryClass
{
private class MyException : Exception { ... }
public void MyMethod() { throw new MyException(); }
}
然后调用者不能做catch(MyException exc)
,只有catch(Exception exc)
。但是,这意味着这个例外可以被捕获。
CLR支持抛出不是'Exception'的对象。用一个小小的手推IL,你可以轻松地扔任何东西。 IIRC,那些只会被catch {}'抓住。 – leppie
任何未处理的异常都会停止您的应用程序。通常,应用程序具有应用程序或顶级异常处理程序,用于捕获任何未处理的异常,执行任何数据维护并正常关闭应用程序。
就你而言,我认为最好的方法是创建一个从异常类派生出来的新异常,称之为StopApplicationException。
然后每当你需要停止你的应用程序时,抛出这种类型的异常。在你的catch块进一步调用堆栈:
catch (StopApplicationException)
{
//Stop your application
}
catch (ArgumentNullException)
{
//Null Exception Logic goes here...
}
catch ...And so forth
- 1. AsyncTask doInBackground停止...没有异常抛出
- 2. 抛出终止异常
- 3. 终止抛出异常
- 4. 停止线程,不会抛出异常Android
- 5. free.c抛出与“此程序已停止工作”的异常
- 6. Unix的后台进程异常停止
- 7. 通过多个进程抛出异常
- 8. XCode:找出在异常断点处停止时抛出的异常
- 9. 魔术异常抛出抛出异常
- 10. 抛出异常抛出异常
- 11. 跨线程异常抛出
- 12. 抛出异常不抛出
- 13. 异常抛出异常
- 14. 抛出异常
- 15. 异常抛出
- 16. 抛出异常
- 17. 抛出异常
- 18. 抛出异常
- 19. 抛出异常
- 20. 抛出异常
- 21. 抛出异常
- 22. boost :: asio在暂停时抛出异常
- 23. MULTI调试器在抛出异常时停止
- 24. 抛出的异常犯规停止应用
- 25. 从其他方法抛出异常后EJB定时器停止
- 26. .Net代码执行刚刚停止,没有抛出异常
- 27. 停止在嵌套try-catch块中抛出异常
- 28. 我的方法应该在哪一点停止抛出异常?
- 29. 阻止Python抛出KeyError异常
- 30. libC++ abi.dylib:终止调用抛出异常
为什么你不简单抛出异常并强制进程被关闭? –