【问题标题】:Error while receiving data from serial port从串口接收数据时出错
【发布时间】:2012-11-07 13:26:27
【问题描述】:

我有几个窗口的应用程序(实际上它的两个几乎相同的窗口具有某些功能)。该功能之一是从 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 一起工作的代码分拆到一个单独的类中,并且只有该类的一个实例。将数据与视图分离。

标签: c# wpf serial-port


【解决方案1】:

方法calculateWeight_Click打开串口。因此,我假设您在 Open 调用时遇到异常,因为 documentation 状态 UnauthorizedAccessException 可以在以下情况下抛出:

当前进程或系统上的另一个进程已经通过 SerialPort 实例或在非托管代码中打开了指定的 COM 端口。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2017-03-16
    相关资源
    最近更新 更多