我目前正在使用现有的Windows窗体应用程序(VB.net),并且正在忙于重新设计异常处理机制。
目前,代码中的很多方法都被try / catch块包围,捕获一般异常,然后调用一个实用程序方法,该方法只向用户显示一个消息框,通知他错误,然后记录它。 / p>
因此,在很多情况下,不采取纠正措施,只记录异常。我知道这可能不是最好的方式,但是我们不得不在不久的将来这样做。
无论如何,我想以更通用的方式做到这一点,所以我连接了Application.ThreadException和AppDomain.UnhandledException。
除了一个不便之外,这似乎运作良好。每当从.net运行时本身或第三方控件抛出错误时,堆栈跟踪就从那里开始,在框架方法或第三方方法中抛出异常(显然!)。
但如果我有一个简单的方法可以找到这些异常在我的代码中跨越边界的确切位置,那将会更方便。我想要一种简单的方法来确定(在Application.ThreadException中)我自己的代码中发生了异常。
我知道这个信息包含在Exception.StackTrace属性中,但我想要一个简单的方法来获取这些特定信息,因为stacktrace属性是一个巨大的字符串。
基本上我想要将异常首先冒充到我的代码中的类,方法和行号。
答案 0 :(得分:0)
你应该尝试使用这种代码:
[STAThread] static void Main() {
try {
Application.Run(new Form1());
}
catch (Exception e) {
//do smth with exception
}
}
它会捕获仅由您的代码引发的异常,同时AppDomain.UnhandledException
可能更详细。当然,这只适用于主线程。