2013-02-19 38 views
6

नहीं पकड़ सकता मेरे पास एक यूएसबी-जीपीएस से बात करने वाला एक एप्लीकेशन है। साधारण खुशी से कुछ भी नहीं होने पर यह एक आकर्षण के रूप में काम कर रहा है। लेकिन मुझे एक बड़ी समस्या है। अगर यूएसबी खींच लिया जाता है, तो मेरा प्रोग्राम (कुछ बार) दुर्घटनाग्रस्त हो जाता है। मैंने कोशिश की है/पकड़ो जहां मुझे उनकी आवश्यकता है लेकिन यह IOExeption पकड़ा नहीं जाता है। मुझे बस "डिवाइस कमांड को नहीं पहचानता" और प्रोग्राम बंद हो जाता है। जानकारीIOException मैं

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

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

किसी को भी कैसे दुर्घटनाओं को रोकने के लिए कोई सुझाव हैं जाँच करने के लिए एक टाइमर में

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

तब मैं इस राशि: यहाँ कोड है कि बंदरगाह शुरू होता है?

[संपादित करें] ढेर:

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

यह मुझे लगता है जैसे अपवाद एक कार्यकर्ता धागे पर हो रहा है; स्क्रीन पर दिखाई देने वाले अपवाद का 'स्टेकट्रेस' क्या है? (शायद एक बदसूरत त्रुटि बॉक्स में) –

+0

क्या आपको 'parent.LoggIt.WriteLogg ("GPSERROR" 'line? – Artemix

+0

द्वारा लॉग इन करने के लिए लिखा गया त्रुटि है क्या आपने कभी इसका उपयोग करने से पहले' पोर्ट 'सेट किया था? –

उत्तर

1

मैं पूरी तरह यकीन नहीं है अगर यह यहाँ लागू होता है, लेकिन appdomain स्तर पर समग्र दुर्घटनाओं को पकड़ने के लिए तंत्र देखते हैं - http://msdn.microsoft.com/en-GB/library/system.appdomain.unhandledexception.aspx

(नहीं अन्य घटनाओं पर अनुभाग, उदाहरण के लिए थ्रेडएक्सप्शन - इन्हें स्थिति के आधार पर अपने स्वयं के हैंडलर की आवश्यकता हो सकती है)

+0

"पकड़" है शायद इसे अधिक बताते हुए; यदि आप जल्दी होते हैं तो आप उन्हें * लॉग * कर सकते हैं, लेकिन आमतौर पर यह उस चरण में टर्मिनल होता है और आपकी प्रक्रिया मरने वाली है –