rud*_*ler 3 c# exception-handling
我有一个类似代码的应用程序(不是我写的)
try
{
EnumerateSomeCoolHardwareDevice();
}
catch (Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)
更新 - 这是.NET C#和EnumerateSomeCoolHardwareDevice()正在使用SerialPort?
我知道这段代码有多糟糕,但它的作用是有原因的!
我的问题:我可以看到它在EnumerateSomeCoolHardwareDevice()中崩溃了; 但它没有被Catch捕获(...) - 它只是与发送报告对话框崩溃了!这也只发生在发布版本中...他们的任何理由为什么我的异常不会被catch(...)捕获?
我的猜测是你没有在你的语言/框架中获得异常,而是EnumerateSomeCoolHardwareDevice()做了一些奇怪的事情,只会导致操作系统终止你的进程.请记住,硬件细节是由Java和.NET等框架抽象出来的,所以每当你直接用硬件做事时,你可能都依赖于非托管资源......无论出现什么问题都可以杀死你,抓住或不捕获.
一个可能的原因是该EnumerateSomeCoolHardwareDevice()函数使用线程.如果在线程中抛出异常并且未在其线程内处理,那么它可能会使应用程序崩溃.这个简单的应用程序可以证明我的意思:
public static void testThread()
{
throw new Exception("oh god it's broken");
}
static void Main(string[] args)
{
try
{
Thread thread = new Thread(testThread);
thread.Start();
Console.ReadKey(); //Just to make sure we don't get out of the try-catch too soon
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你运行该应用程序将崩溃和刻录,而不是像你期望的那样捕获异常.