从串行端口接收数据时出错

时间:2012-11-07 13:26:27

标签: c# wpf serial-port

我有几个窗口的应用程序(实际上它的两个几乎相同的窗口有一些功能)。其中一个功能是从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;
}

任何人都可以提供帮助? ;)

1 个答案:

答案 0 :(得分:3)

方法calculateWeight_Click打开串口。因此,我假设您在Open来电时收到例外,因为documentation状态UnauthorizedAccessException可能会在以下情况下被抛出:

  

当前进程或系统上的其他进程已经通过SerialPort实例或非托管代码打开指定的COM端口。

完成后,解决方案是CloseDispose sp,如果您想重用现有实例,请使用IsOpen