2009-11-18 25 views
8

我正在嘗試打開COM1,但每次撥打SerialPort.Open()時都會發生奇怪的錯誤。無法在.NET中打開串口

的錯誤是:

給定的端口名稱不會與COM/COM啓動或沒有解決一個有效的串行端口。 參數名:PORTNAME

的代碼非常簡單:

SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One); 
port.Handshake = Handshake.RequestToSend; 
port.Open(); 

如果我把SerialPort.GetPortNames(),它返回稱爲 「COM1」 一個端口。

我已驗證我的電腦上有「COM1」,並且我沒有在任何其他應用程序中使用它。當我在另一臺計算機上運行代碼時,它可以正常工作。我的系統正在運行Windows Vista。 .NET的版本是2.0。

是否有安全設置我必須改變某處?我以管理員身份登錄,並關閉了UAC。


更多信息

我使用Process Explorer中並確認沒有使用\設備\ Serial0上。


解決方法

我安裝了一個USB轉串口適配器(COM3),它工作正常。去搞清楚。 COM1必須有問題。

+0

我知道有時'GetPortNames()'會給它帶來不可思議的字符。 – 2009-11-18 21:45:23

+0

超級終端工作? – SwDevMan81 2009-11-19 18:25:40

回答

-1

也許是一個錯字?確保您使用所有英文字母輸入COM1。

+5

我100%確定「COM1」拼寫正確。 – 2009-11-19 12:13:47

1

嘗試使用符號\。\ COMX而不是COMX。 確保你逃脫字符: 「\\。\ COM1」

編輯:佬,SO逃脫我的\所以它應該是這樣的(ommit空格): 「\ \ \ \ \ \ COM1」

+1

如果我這樣做,我得到一個異常,說明COM端口不能以\ – 2009-11-19 14:11:32

1

您可以嘗試設置端口的屬性,而不是使用構造函數。

mPort = new System.IO.Ports.SerialPort(); 
if(mPort.IsOpen) 
{ 
    mPort.Close(); 
} 
mPort.PortName = "COM1"; 
mPort.BaudRate = 19200; 
mPort.Parity = Parity.None; 
mPort.DataBits = 8; 
mPort.StopBits = StopBits.One; 
mPort.Handshake = Handshake.RequestToSend; // Handshake.None; 
mPort.Open(); 

我也遇到了串行通訊和Microsoft Active Sync的問題。我不知道你是否有這個運行,但它可能是值得一槍殺死它(任務管理器中的進程名稱是wcescomm.exe)。希望有所幫助。

您還可以嘗試使用Marshal.GetLastWin32Error()來查看低級別是否導致問題?我不確定這是否會給你更多的信息。

+0

開始您可以(在這種情況下)省略對.PortName的調用,因爲默認情況下它在內部設置爲「COM1」。 – Andy 2009-11-19 19:01:23

+0

還有DataBits和StopBits。 – SwDevMan81 2009-11-19 19:18:48

5

我也有這個問題。事實證明,我有一臺打印機設置爲使用我試圖打開的COM端口。一旦我改變打印機使用另一個端口的端口打開就好了。

+0

謝謝 - 我花了2個小時試圖弄清楚這一點! – 2013-04-02 02:27:58

1

可能是某些在後臺運行的應用程序可能是打開了您的端口(請參見question)。

下載Process Explorer並使用「查找」菜單上的「查找句柄或DLL」查找COM端口打開的進程。在我的情況下,spoolsv.exe總是使用COM1,COM3端口。所以我用另一個COM端口(COM2)祝你好運!