gpt4 book ai didi

c# - 在 C# 中有没有一种方法可以捕获来自控件/窗体的所有异常?

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:28 24 4
gpt4 key购买 nike

我想要一个类似于“包罗万象”的东西,用于从驻留在当前线程 中的控件或表单内部抛出的异常,但不求助于使用 整个线程的Application.ThreadException

为什么?因为我想保持异常处理模块化。

所有可能导致问题的代码都在当前线程中运行的窗体 (DummyForm) 中运行。我希望能够将它们全部包装在一些其他异常 (DummyFormException) 中,该异常会将 Form 标识为异常的原因,这样如果该异常进入 Application.ThreadException ,我可以知道清理涉及关闭 DummyForm

在我看来,替代方案是:

# 在 DummyForm 中用 DummyFormException 包装每个抛出的异常。我不太喜欢这样,因为它要求 future 的程序员也记住包装每个抛出的异常。 # 在它自己的线程中运行DummyForm,并使用Application.ThreadException 捕获它们,并识别该代码中的线程。一旦我知道它来自哪里,我就可以简单地关闭 DummyForm 并结束线程。

有没有不用多线程的方法来做到这一点?我不想这样做,这似乎只是为了错误处理而浪费。还是我做错了?

最佳答案

我不确定将所有错误处理代码放在一个地方是个好主意。

错误处理最好在它处理的操作旁边进行。

错误处理的全部意义在于改变程序遇到错误时的行为。这意味着您必须在该位置编写特定代码,并且您不能像您希望的那样将所有内容都放在一个地方。

但是,也许您需要的只是一个记录内容等的辅助方法。


未处理的异常处理程序(Application.ThreadException、AppDomain.CurrentDomain.UnhandledException)确实存在,但这不是它们的用途。

你应该使用它们来处理意外异常,即发生了你没有想到的错误,并且你想很好地处理这种情况(例如,你可能想记录错误,或者显示一个很好的错误框给用户,或轻轻关闭程序)

如果您知道某处可能会发生异常,那“某处”是编写异常处理代码的好地方。

关于c# - 在 C# 中有没有一种方法可以捕获来自控件/窗体的所有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/623262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com