Mam aplikację rozmawiającą z USB-GPS. Działa jak urok, jeśli nie ma nic niezwykłego. Ale mam duży problem. Jeśli USB zostanie wyciągnięty, mój program (czasami) zawiesza się. Próbuję/łapię, gdzie ich potrzebuję, ale ten IOExeption nie zostanie złapany. Właśnie otrzymuję komunikat "Urządzenie nie rozpoznaje polecenia", a program się zatrzymuje. Oto kod, który rozpoczyna portu:Wyjątek IOException Nie mogę złapać
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);
}
}
to mam to w timer, aby sprawdzić informacje o
if (this.LatLong.newDataReceived())
{
//DOING STUFF
}
if (!this.LatLong.checkIfPortsOpen())
this.LatLong.openPort();
ktoś ma jakieś sugestie, jak zatrzymać awarii?
[EDIT] Stos:
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()
Wydaje mi się, że wyjątek ma miejsce w wątku roboczym; jaki jest ".StackTrace" wyjątku, który pojawia się na ekranie? (prawdopodobnie w paskudnym polu błędu) –
Czy napisałeś błąd do logu przez 'parent.LoggIt.WriteLogg (" GPSERROR "' linia? – Artemix
Czy kiedykolwiek ustawiłeś 'port' przed użyciem? –