Я вызываю следующую функцию, где-то в программе, которая выдаст исключение
public static List<Templates> LoadTemplates()
{
// ...
// System.Threading.Thread.CurrentThread.ManagedThreadId == 1 // ID written to log file
System.IO.Directory.GetFiles("does_not_exist_directory");
// ...
}
И я пытаюсь отловить исключение в программе по умолчанию .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 в выходной директории в диалоговом окне с сообщением появляется сообщение об исключении
EDIT:
Чтобы перехватить ошибку при запуске .exe из выходного каталога, код должен быть скомпилирован с обработкой события Application.ThreadException
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new Form());
Но тогда MSVS будет вести себя нежелательно, показывая собственный диалог MSVS «Советы по устранению неполадок» без полей «Unhandled Exception».
Как я могу гарантировать, что он ведет себя одинаково как в MSVS, так и вне ее?