2013-02-19 20 views
6

Bir USB-GPS ile konuştuğum bir uygulama var. Sıradan mutluluklardan yoksun bir çekicilik gibi çalışıyor. Ama benim büyük bir problemim var. USB dışarı çıkarsa, programım (bazen) çöküyor. İhtiyaç duyduğum yerde Try/Catch var ama bu IOExeption yakalanmıyor. Ben sadece "Aygıt komutu tanımıyor" alıyorum ve program durur.IOException Yakalayamıyorum

if (this.LatLong.newDataReceived()) 
    { 
     //DOING STUFF 
    } 

if (!this.LatLong.checkIfPortsOpen()) 
     this.LatLong.openPort(); 

Herkes nasıl çöküyor durdurmak için herhangi bir öneriniz bilgilerinin kontrolü bir Timer

 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); 
     } 
    } 

Sonra bu var: Burada port başlar kodudur?

[DÜZENLE] yığını:

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() 
+0

Bir çalışan iş parçacığında istisna gerçekleştiği gibi geliyor bana; Ekranda görünen istisnanın '.StackTrace' nedir? (muhtemelen bir çirkin hata kutusunda) –

+0

"parent.LoggIt.WriteLogg" ("GPSERROR") satırı ile oturum açmak için yazdığınız hata mı var? – Artemix

+0

Kullanmadan önce hiç 'bağlantı noktası' ayarladınız mı? –

cevap

1

burada geçerlidir, ancak AppDomain düzeyinde genel çöküyor yakalamak için mekanizmalar varsa ben tamamen emin değilim - http://msdn.microsoft.com/en-GB/library/system.appdomain.unhandledexception.aspx

(değil diğer olaylara ilişkin bölüm, örn. ThreadException - bu duruma bağlı olarak kendi işleyicilerine gereksinim duyabilirler)

+0

"catch" belki fazla belirtme; hızlı olursanız, bunları * kaydedebilirsiniz, ancak genellikle bu aşamada terminaldir ve işleminiz ölmek üzere. –

İlgili konular