gpt4 book ai didi

.NET SerialPort DataReceived 事件未触发

转载 作者:行者123 更新时间:2023-12-04 13:07:40 26 4
gpt4 key购买 nike

我有一个 WPF 测试应用程序,用于评估基于事件的串行端口通信(与轮询串行端口)。问题是 DataReceived 事件似乎根本没有触发。

我有一个非常基本的 WPF 表单,其中包含用于用户输入的 TextBox、用于输出的 TextBlock 和用于将输入写入串行端口的按钮。

这是代码:

public partial class Window1 : Window
{
SerialPort port;

public Window1()
{
InitializeComponent();

port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.DataReceived +=
new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
}

void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Debug.Print("receiving!");
string data = port.ReadExisting();
Debug.Print(data);
outputText.Text = data;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
Debug.Print("sending: " + inputText.Text);
port.WriteLine(inputText.Text);
}
}

现在,这里是复杂的因素:
  • 我正在使用的笔记本电脑没有串口,所以我使用了一个名为 Virtual Serial Port Emulator 的软件来设置 COM2。 VSPE 过去工作得非常好,目前尚不清楚为什么它只会在 .NET 的 SerialPort 类中出现故障,但我提到它以防万一。
  • 当我点击表单上的按钮发送数据时,我的 super 终端窗口(连接在 COM2 上)显示数据正在通过。是的,当我想测试我的表单读取端口的能力时,我断开了 super 终端。
  • 我已经尝试在连接事件之前打开端口。没变。

  • 我已经在这里阅读了另一篇文章,其中其他人也遇到了类似的问题。在这种情况下,这些信息都没有帮助我。

    编辑:

    这是控制台版本(从 http://mark.michaelis.net/Blog/TheBasicsOfSystemIOPortsSerialPort.aspx 修改):
    class Program
    {
    static SerialPort port;

    static void Main(string[] args)
    {
    port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
    port.DataReceived +=
    new SerialDataReceivedEventHandler(port_DataReceived);
    port.Open();

    string text;
    do
    {
    text = Console.ReadLine();
    port.Write(text + "\r\n");
    }
    while (text.ToLower() != "q");
    }

    public static void port_DataReceived(object sender,
    SerialDataReceivedEventArgs args)
    {
    string text = port.ReadExisting();
    Console.WriteLine("received: " + text);
    }
    }

    这应该消除任何关于它是线程问题的担忧(我认为)。这也行不通。同样, super 终端报告通过端口发送的数据,但控制台应用程序似乎没有触发 DataReceived 事件。

    编辑 #2:

    我意识到我有两个独立的应用程序应该从串行端口发送和接收,所以我决定尝试同时运行它们......

    如果我输入控制台应用程序,WPF 应用程序 DataReceived 事件将触发,并带有预期的线程错误(我知道如何处理)。

    如果我输入 WPF 应用程序,控制台应用程序 DataReceived 事件会触发,并且它会回显数据。

    我猜问题出在我使用 VSPE 软件的某个地方,该软件设置为将一个串行端口同时作为输入和输出。通过 SerialPort 类的一些奇怪之处,串行端口的一个实例不能既是发送者又是接收者。反正我觉得已经解决了。

    最佳答案

    port.DtrEnable = true;

    这为我解决了问题,未启用 DataTransmitReady 标志,因此未收到任何数据。

    关于.NET SerialPort DataReceived 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281618/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com