【发布时间】:2011-11-27 10:05:00
【问题描述】:
我在程序中的某个地方调用以下函数会引发异常
public static List<Templates> LoadTemplates()
{
// ...
// System.Threading.Thread.CurrentThread.ManagedThreadId == 1 // ID written to log file
System.IO.Directory.GetFiles("does_not_exist_directory");
// ...
}
我尝试在默认 Program.cs 中捕获异常
try
{
// System.Threading.Thread.CurrentThread.ManagedThreadId == 1
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show("ERROR CAUGHT");
}
finally { // do clean up }
在 MSVS 中运行时,异常会按预期捕获。但是当通过双击输出目录中的 .exe 运行时,异常会显示在消息对话框中,说明
编辑:
要在从输出目录运行 .exe 时捕获错误,必须在编译代码时处理 Application.ThreadException 事件
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form());
但随后 MSVS 将通过显示 MSVS 本机“故障排除提示”无边界消息对话框“未处理的异常”来表现不良。
如何确保它在 MSVS 内外的行为相同?
【问题讨论】:
-
当我看不到反对我的帖子的原因时,尤其是当我认为你们将无法重现我的问题时,这实际上是非常令人沮丧的。 =(