【发布时间】:2018-06-16 16:53:47
【问题描述】:
我正在开发一个连接到虚拟机的应用程序(使用 Hyper-V)。 (我现在使用虚拟机进行开发,但最终产品将是物理串行连接机器。不是虚拟机) 我已经用 COM 适配器像这样创建了一个命名管道。
我可以像这样连接 PuTTy。
在 Hyper-V 上运行 CentOS 构建
然后我编写了一个简单的应用程序来使用 C# 连接到它
my_Serial_Port = new SerialPort();
my_Serial_Port.PortName = @"\\.\pipe\ttyS0";
my_Serial_Port.BaudRate = m_BaudRate;
my_Serial_Port.DataBits = 8;
my_Serial_Port.Parity = Parity.None;
my_Serial_Port.StopBits = StopBits.One;
my_Serial_Port.Handshake = Handshake.None;
my_Serial_Port.DtrEnable = true;
my_Serial_Port.RtsEnable = true;
my_Serial_Port.WriteTimeout = 15000;
my_Serial_Port.ReadTimeout = 15000;
my_Serial_Port.ErrorReceived += my_Serial_Port_ErrorReceived;
问题是当我打开连接时,我会抛出这个异常。
稍作搜索,我找到了此信息,但没有解决方法。 msdn.microsoft.com/en-us/library/system.io.ports.serialport.portname 我也尝试以管理员身份运行我的应用程序(Putty 也需要这个) 它没有用。
根据 Oystein 的建议,我尝试了:
string[] ports = SerialPort.GetPortNames();
string result = "The following serial ports were found:" + Environment.NewLine;
// Display each port name to the console.
foreach (string port in ports)
{
result += port + Environment.NewLine;
}
MessageBox.Show(result);
不幸的是 COM1 在物理机上。
有人知道我怎样才能让它工作吗? 谢谢!
【问题讨论】:
-
尝试使用 SerialPort.GetPortNames (msdn.microsoft.com/en-us/library/…) 找出应用程序将串行端口视为什么格式。
-
不幸的是它只列出了 COM1。
-
我也在PowerShell PS C:\WINDOWS\system32> [System.IO.Directory]::GetFiles("\\.\\pipe\\") 中运行了命令并可以确认管道存在。
标签: c# linux serial-port hyper-v