2013-04-12 75 views
1

我有一個使用D-Link GSM調制解調器發送/接收SMS消息的C#應用​​程序。殺死進程後釋放COM端口

由於某些原因,D-Link USB在一段時間(隨機)後會自動斷開並重新連接。當它重新連接時,它打開保留COM4的D-Link連接管理器。

現在,當我的應用程序運行並嘗試發送短信時,它失敗了,因爲它沒有找到任何可用的(已經在使用我的D-Link管理器)。

當我試圖在應用程序加載時,如果D-Link進程存在,我使用process.kill()將其殺死。這會殺死應用程序,但COM4仍然無法訪問。

有沒有辦法殺死進程並以編程方式釋放COM端口?

回答

1

殺死一個進程並不給它一個清理的機會。如果客戶端異常終止,COM端口很容易掛斷。

嘗試Process.CloseMainWindow。希望該過程能夠通過正常關閉和關閉COM端口來響應。但是,您必須給它一些時間才能關閉,但您可以使用Process.WaitForExit

0

SerialPort類實現了IDisposable正是因爲這個原因:當端口變量超出範圍時清除非託管資源(如端口本身)。

using (var serialPort = new SerialPort()) 
{ 
    // Set the read/write timeouts 
    serialPort.ReadTimeout = 500; 
    serialPort.WriteTimeout = 500; 

    serialPort.Open(); 

    // do something 
} 

當你殺死這個過程時,它不會總是被清理乾淨,但是這樣一來,你給它一個戰鬥機會。