IOException我抓不到

本文关键字:IOException | 更新日期: 2023-09-27 18:00:02

我有一个应用程序正在与USB-GPS对话。这是一种魅力,如果没有什么不同寻常的快乐。但我有一个大问题。如果USB被拔出,我的程序(有时)会崩溃。我在需要的地方有Try/Catch,但这个IOExeption没有被捕获。我只得到"设备无法识别命令",程序停止。这是启动端口的代码:

        public LatLongFromGPS(Form1 parent)
    {
        this.parent = parent;
        String port;
        this.SPort = new SerialPort(port, 4800);
        this.SPort.ReadTimeout = 500;
        this.SPort.DataReceived += new SerialDataReceivedEventHandler(dataReceived);
    }
    public bool checkIfPortsOpen()
    {
        return (this.SPort.IsOpen);
    }
    public void openPort()
    {
        try
        {
            if (!this.SPort.IsOpen)
            {
                this.SPort.Open();
            }
        }
        catch(Exception ex)
        {
            parent.LoggIt.WriteLogg("OPENPORT " + ex.ToString(), Logger.LoggType.Debug);
        }
    }
    public void dataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        try
        {
            if (SPort.IsOpen)
            {
                String GPGGAString;
                Thread.CurrentThread.Join(200);
                buffert = new char[this.SPort.BytesToRead];
                this.SPort.Read(buffert, 0, buffert.Length);
                GPGGAString = findStringFromGPS();
                if (GPGGAString != null)
                {
                    getLatitudefromString(GPGGAString);
                    getLongitudefromString(GPGGAString);
                    getTimeFromString(GPGGAString);
                    this.newData = true;
                }
            }
        }
        catch(Exception ex)
        {
            parent.LoggIt.WriteLogg("GPSERROR    " + ex.ToString(), Logger.LoggType.Debug);
        }
    }

然后我在计时器中有这个来检查信息

if (this.LatLong.newDataReceived())
   {
        //DOING STUFF
   }
if (!this.LatLong.checkIfPortsOpen())
       this.LatLong.openPort();

有人对如何阻止车祸有什么建议吗?

[EDIT]堆栈:

at System.IO.Ports.InternalResources.WinIOError(Int32, System.String)
at System.IO.Ports.InternalResources.WinIOError()
at System.IO.Ports.SerialStream.Dispose(Boolean)
at System.IO.Ports.SerialStream.Finalize()

IOException我抓不到

我不完全确定它是否适用于这里,但有一些机制可以在应用程序域级别捕获整体崩溃-http://msdn.microsoft.com/en-GB/library/system.appdomain.unhandledexception.aspx

(不是关于其他事件的部分,例如ThreadException-根据情况,这些事件可能需要自己的处理程序)

虽然不是最佳实践,但顶级异常处理可能会解决您的问题。看见http://richnewman.wordpress.com/2007/04/07/top-level-exception-handling-in-windows-forms-applications-%E2%80%93-例如,代码列表-1/。