C# 端口未关闭

C# 端口未关闭,c#,serial-port,C#,Serial Port,我使用的串行端口事件处理程序与下面的代码非常类似。没什么花哨的,而且很好用。。。大多数时候。我已经能够通过拔下串行端口连接,等待一段时间,然后将其重新插入来诱发错误。关闭应用程序后,我发现它没有关闭端口,因此无法重新打开端口。它在锁定时不会抛出异常,只是停止读取。我必须重新启动机器以强制它释放端口 我有一些想法,但如果有人能提供一些建议而不羞辱我,我将不胜感激。一个可能导致问题的警告是,我正在使用第三方应用程序共享串行端口。我的应用程序必须隐藏无法关闭的关键任务应用程序 使用系统; 使用Syst

我使用的串行端口事件处理程序与下面的代码非常类似。没什么花哨的,而且很好用。。。大多数时候。我已经能够通过拔下串行端口连接,等待一段时间,然后将其重新插入来诱发错误。关闭应用程序后,我发现它没有关闭端口,因此无法重新打开端口。它在锁定时不会抛出异常,只是停止读取。我必须重新启动机器以强制它释放端口

我有一些想法,但如果有人能提供一些建议而不羞辱我,我将不胜感激。一个可能导致问题的警告是,我正在使用第三方应用程序共享串行端口。我的应用程序必须隐藏无法关闭的关键任务应用程序

使用系统;
使用System.IO.Ports;
类PortDataReceived
{
公共静态void Main()
{
SerialPort mySerialPort=新的SerialPort(“COM1”);
mySerialPort.BaudRate=9600;
mySerialPort.Parity=奇偶校验.None;
mySerialPort.StopBits=StopBits.One;
mySerialPort.DataBits=8;
mySerialPort.Handshake=Handshake.None;
mySerialPort.RtsEnable=true;
mySerialPort.DataReceived+=新的SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine(“按任意键继续…”);
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
私有静态void DataReceivedHandler(对象发送方,SerialDataReceivedEventArgs e)
{
SerialPort sp=(SerialPort)发送方;
字符串indata=sp.ReadExisting();
Console.WriteLine(“接收到的数据:”);
Console.Write(indata);
}
}

没有引发异常或错误消息。

您是否尝试注册和处理ErrorReceived和Pinchhange事件?“我正在使用第三方应用程序共享串行端口”此应用程序是否正确处理这种情况?如果你依赖于它,而它不依赖于你,你需要寻找一个替代品。“在我关闭应用程序之后,”我建议使用try finally块,或者实现IDisposable。最后,您可以确保在应用程序关闭之前关闭端口(如果它仍然打开)。谢谢。我将添加该代码。最后,我希望在端口连接丢失时通知用户,并强制用户关闭端口(修复问题),然后重新打开端口。我想如果我只是检查原始端口是否可用,如果不可用,则抛出错误消息。仍在使用串行端口中的方法来查看哪些方法可能有效。您是否尝试注册和处理ErrorReceived和Pinchhange事件?“我正在使用第三方应用程序共享串行端口”此应用程序是否正确处理这种情况?如果你依赖于它,而它不依赖于你,你需要寻找一个替代品。“在我关闭应用程序之后,”我建议使用try finally块,或者实现IDisposable。最后,您可以确保在应用程序关闭之前关闭端口(如果它仍然打开)。谢谢。我将添加该代码。最后,我希望在端口连接丢失时通知用户,并强制用户关闭端口(修复问题),然后重新打开端口。我想如果我只是检查原始端口是否可用,如果不可用,则抛出错误消息。仍在使用串行端口中的方法,以查看哪些方法可行。