2013-09-30 141 views
2

我的程序使用串行通信端口,如COM1。但有時候這個端口會因程序失敗或其他原因而被鎖定在port in use狀態。如何在C#中發佈通信端口(RS-232 COM端口)

假設其他軟件使用它。我可以強制使用該端口嗎?

無論如何我都想使用那個端口。可能嗎?

+2

你不能將其關閉其他應用程序,則需要關閉該應用程序。可以檢查comport是否被另一個應用程序使用。併爲您的應用選擇一個可用的端口。如果您願意,我可以爲您提供檢查所有可用com端口的代碼。 – Max

+1

那是「另一個軟件」你寫的東西,可以修改還是第三方程序? –

+1

SerialPort是IDisposable,確保在類實例不用時調用Dispoose方法。 –

回答

0

@MaxMommersteeg如果有方法如DLL func,WinApi它會很棒。

獲取可用的COM端口並不難,而且比您想象的要容易。

public List<string> GetAllAvailableComPorts() 
{ 
    return System.IO.Ports.SerialPort.GetPortNames().ToList(); 
} 

有關GetPortnames方法的信息,請參閱Get Port Names Method(MSDN)。

上面的代碼將返回一個List<string>填充所有可用的COM端口。 你可以用下面的代碼調用它:

//Create new list<string> 
List<string> availableComPorts = new List<string>(); 

//Fill list with list<string> returned from GetAllAvailableComports method. 
availableComPorts = GetAllAvailableComports(); 

列表中的所有COM端口提供,和COM端口當前正在使用中不會出現在列表中。您可以使用List < string>來檢查COM1是否可用。如果是這樣,你可以連接到它,如果沒有,你可以給用戶一個消息,說它正在使用(當連接到一個不可用的端口時,用戶會得到一個「Acces denied」消息。)

我想你正在使用Windows Forms,因爲您標記了C#和SerialPort,我不認爲ASPWPF能夠使用SerialPort類(糾正我,如果我錯了)。所以我會創建一個列表框,用所有可用的COM端口填充,讓用戶選擇使用哪個COM端口。用戶不能選擇錯誤的COM端口,因爲它們不在列表中。

如果您需要更多關於此的信息,您可以在下面留言。自從我上次創建的使用串口連接的應用程序以來,我仍然得到了足夠的代碼。

我想在下面向您推薦我自己的問題。它有一些更多的信息:

Get list of available COM ports

+0

這是一個'WPF',你可以使用SerialPort for ASP和WPF。對Silverlight有限制,但對於SL5,一些選項來自「瀏覽器外」。 –

+0

我對使用端口沒有任何問題。我沒有看到在你的回答中強迫一個忙碌的港口的東西。如果端口正忙於我的程序,我已經完成了顯示消息。我想找一個使用繁忙端口的方法。 –

+0

很抱歉聽到這樣的消息:無法強制使用繁忙的端口,因爲它已被使用,每個端口只有一個連接。 – Max