Tôi có một ứng dụng nói chuyện với một USB-GPS. Nó hoạt động như một sự quyến rũ nếu không có gì ngoài hạnh phúc bình thường. Nhưng tôi có một vấn đề lớn. Nếu USB bị kéo ra, chương trình của tôi (một số lần) bị treo. Tôi đã thử/Catch nơi tôi cần chúng nhưng IOExeption này không bị bắt. Tôi chỉ nhận được "Thiết bị không nhận ra lệnh" và chương trình dừng lại. Dưới đây là đoạn code mà bắt đầu vào cổng:IOException Tôi không thể bắt được
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);
}
}
Sau đó, tôi có điều này trong một Timer để kiểm tra các thông tin
if (this.LatLong.newDataReceived())
{
//DOING STUFF
}
if (!this.LatLong.checkIfPortsOpen())
this.LatLong.openPort();
Bất cứ ai có bất cứ đề nghị làm thế nào để ngăn chặn tai nạn?
[EDIT] Các stack:
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()
nghe có vẻ như tôi là ngoại lệ đang xảy ra trên một chuỗi công nhân; '.StackTrace' của ngoại lệ xuất hiện trên màn hình là gì? (có thể trong một hộp lỗi xấu) –
Có phải bạn đã viết sai lỗi để ghi nhật ký bằng 'parent.LoggIt.WriteLogg (" GPSERROR "' line? – Artemix
Bạn đã bao giờ đặt 'cổng' trước khi sử dụng nó chưa? –