【发布时间】:2010-12-06 09:46:10
【问题描述】:
我正在用 c# 编写一个应用程序,它利用 SerialPort 类与一些设备进行通信。现在我一直遇到的一个大问题是如何正确释放那里的资源,因为在尝试使用已被使用的串行端口时会立即出现异常。
由于通常 GC 应该处理大部分工作,我有点想不出还有什么可以尝试的...
主要是我尝试了两件事(在我的逻辑中)应该做的工作。我使用基于会话的通信,所以我在每次通信之前和之后调用OpenPort 和ClosePort 方法 - 所以应该关闭端口。此外,我还尝试将包含端口的对象设置为空 - 但我仍然一直得到 UnauthorizedAccessExceptions - 尽管我 100% 确定 SerialPort.Close() 方法已被调用。
你们知道释放端口的更好方法,所以我不再遇到这种异常了吗?
编辑: 感谢您的回答,但 Dispose() 的东西不起作用 - 我之前曾尝试过 - 也许我做错了什么,所以这是我的代码的示例:
这实际上很像 Øyvind 建议的,虽然我只是添加了 IDisposable - 但也不起作用:
所以这将是我的包装类:
class clsRS232 : IDisposable
{
public void clsRS232()
{
Serialport port = new Serialport("COM1",9600,Parity.none,8,Stopbits.one);
}
public void openPort()
{
port.Open();
}
public void sendfunc(string str)
{
port.Write(str);
}
public string readfunc()
{
port.ReadTo("\n");
}
public void Dispose()
{
port.Dispose();
}
}
现在每当我需要 rs232 通信时,我都会像这样调用一个新实例:
clsRS232 test = new clsRS232;
test.openport();
test.sendfunc("test");
test.Dispose();
但这并没有改变任何东西 - 我仍然得到很多 UnauthorizedAccessExceptions - 如果另一个人是对的(SerialPort 类的 Dispose() 只包含 SerialPort.Close() ) - 那么我想我没有t 真的改变了我之前的方法,我有一个函数调用 close();
感谢您的回答 - 仍然希望找到解决方案 :)
【问题讨论】:
标签: c# .net serial-port