0
我有幾個窗口的應用程序(實際上它的兩個幾乎與一些功能相同的窗口)。其中一項功能是從COM端口讀取數據(讀取加權機的重量)。問題是,它在第一個窗口中工作完美,但是當我關閉它並打開另一個窗口時,然後單擊相同的函數(讓它稱爲計算重量),即時獲取此錯誤消息: 訪問端口'COM1'被拒絕。從串口接收數據時出錯
代碼:
private void calculateWeight_Click(object sender, RoutedEventArgs e)
{
sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
tekst = string.Empty;
sp.Open();
sp.WriteLine(((char)5).ToString());
sp.WriteLine(((char)17).ToString());
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
}
private delegate void UpdateUi(string s);
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
tekst += sp.ReadExisting();
if (tekst.Contains('S') && tekst.Length > 14)
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUi(czytajWage), tekst);
}
string tekst = string.Empty;
void czytajWage(string s)
{
string w = "";
for (int i = 5; i < 14; i++)
{
w += s[i];
}
MessageBox.Show(w);
w = "";
tekst = "";
sp.DataReceived -= sp_DataReceived;
}
任何人都可以幫助嗎? ;)
關閉窗口時是否關閉端口? –
您不能共享串行端口。當窗口關閉並在另一個窗口中再次打開時關閉SerialPort也非常麻煩。此處的最佳做法是將與SerialPort一起使用的代碼分離到一個單獨的類中,並且只有該類的一個實例。將數據從視圖中分離出來。 –