2012-07-23 24 views
0

在我的本地機器上,C#SerialPort#Open()方法由於端口名稱而拋出ArgumentException?

  • 的Windows XP
  • 端口(COM & LPT)
    • COM3
    • RIM虛擬串行端口V2(COM4)
    • RIM虛擬串行端口V2( COM5)

下面的代碼,

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO.Ports; 
using System.Threading; 

namespace OpenSerialPortTest 
{ 
    class Test 
    { 
     static void Main(string[] args) 
     { 
      foreach (String serialPortName in SerialPort.GetPortNames()) 
      { 
       SerialPort serialPort = new SerialPort(serialPortName); 
       try 
       { 
        serialPort.Open(); // Line 19 
        Console.WriteLine(serialPort.PortName); 
       } 
       catch (Exception ex1) 
       { 
        Console.WriteLine(ex1); 
        try 
        { 
         serialPort.Close(); 
        } 
        catch (Exception ex2) 
        { 
         Console.WriteLine(ex2); 
        } 
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

會引發以下ArgumentException

enter image description here

也就是說,

給定的端口名稱不會與COM/COM或啓動不會解析爲 有效的串行端口。

有人知道爲什麼會發生這種情況嗎?

+0

檢查端口是否已經先打開! – 2012-07-23 01:33:01

+0

@AhmedGhoneim,'IsOpen'返回'false' – user1329572 2012-07-23 01:33:18

+0

很酷,所以請在打開它之前調用'serialPort.Close();'試試吧:) – 2012-07-23 01:42:17

回答

0

看看 http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/35954173-2eeb-46af-bb3e-86840c6b5484

看來問題是,這些COM端口映射到了別的東西,並響應給出了這個奇怪的錯誤。

我有完全相同的問題。我發現我有一個Windows打印機設置使用相同的端口。只要我在打印機設置中更改端口,SerialPort.Open()就起作用了。

+0

是的,但是我硬編碼一次到'COM5',我看到一樣的問題。 – user1329572 2012-07-23 01:33:49

+0

當我這樣做時,我得到'COM3','COM4'和'COM5'。 – user1329572 2012-07-23 01:37:06

+0

對不起,請參閱編輯。 – user1329572 2012-07-23 01:37:56

相關問題