我正在寫一小段代碼來確定計算機上的哪些串行端口可用於連接。這是通過循環訪問不同的串行端口並調用Open()方法完成的。如果發生異常,則表示該端口不可用。處置串行端口對象
但是,視覺工作室告訴我,我沒有正確處理對象,或者如果將dispose方法放置在finally塊中,則處理該對象的次數太多。 什麼是配置串口對象的最佳方式,在for中創建一個新的串口對象是明智的還是讓它保持原樣?
帶問號的註釋部分是我不確定的部分。
public static void QueryOpenPorts(out string[] portNames, out bool[] isOpen)
{
// serial port object used to query
SerialPort serialPort = new SerialPort();
// get valid ports on current computer
portNames = SerialPort.GetPortNames();
// number of valid ports
int count = portNames.Length;
// initialise isOpen array
isOpen = new bool[count];
// iterate through portNames and check Open()
for (int i = 0; i < count; i++)
{
// set port name
serialPort.PortName = portNames[i];
// attempt to open port
try
{
serialPort.Open();
// port available
isOpen[i] = true;
}
catch (Exception ex)
{
// serial port exception
if (ex is InvalidOperationException || ex is UnauthorizedAccessException || ex is IOException)
{
// port unavailable
isOpen[i] = false;
}
}
finally
{
// // close serial port if opened successfully ????????????
// if (serialPort.IsOpen)
// {
// serialPort.Close();
// }
}
}
// release object ?????????
// serialPort.Dispose();
}
您的catch語句也應該只捕獲它可以處理的特定異常(對這兩個語句分別使用catch)。正如所寫,它拋棄了其他的例外。 – 2010-09-01 01:03:25
如何處理isOpen [i] = false後的serialPort.Close() – kenny 2010-09-01 01:08:13
我打算使用catch塊(可能不正確)的方式是爲一組異常執行一個公共塊代碼,而不是在每個塊中都使用相同的代碼。 – steeppham 2010-09-01 01:55:44