gpt4 book ai didi

c# - 从串行端口仅接收不同的值

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:05 25 4
gpt4 key购买 nike

我有一个项目,例如使用 RFID 的注册系统。当用户启用注册模式时,显示的每张卡片应仅保存一次。为此,我使用了一个数组,然后检查数组中的相同代码以查看它是否已经存在。但是我在递增数组索引时遇到问题。

在 Form1 类中,我进行了初始化:

string rx_data = "";
string last_data = "";
string[] availablePlayers = {""};
int plIndex = 0;

在下面的代码中,如果我使用 plIndex,它只会收到第一张卡片,并且似乎不再调用此处理程序。

    public void WriteRxData(object sender, SerialDataReceivedEventArgs e)
{
if (connection.IsOpen && !cardSaveCon.IsOpen)
{
try
{
rx_data = connection.ReadLine(); // check how the data ends
if (!availablePlayers.Any(rx_data.Contains))
{
availablePlayers[plIndex] = rx_data;
receivedData.AppendText(rx_data);
plIndex++;
}

}
catch (Exception err)
{
connection.Close();
}
}

但是相反,如果我使用硬编码索引值,它就可以工作。我想知道如何处理这个问题,因为这必须适用于其他语言。我是 c# 的新手,所以可能缺少某些部分。

最佳答案

  availablePlayers[plIndex] = rx_data;

这会使您的代码在您第二次收到字符串时崩溃。不幸的是,您还捕获了 IndexOutOfRangeException 并关闭了端口。这将完全死锁代码,SerialPort.Close() 只能在事件处理程序返回时完成。

具体反制措施:

  • 使用List<string>而不是字符串[]
  • 从您的代码中删除 try/catch,它除了让您的程序无法恢复之外什么也做不了
  • 为 AppDomain.CurrentDomain.UnhandledException 编写一个事件处理程序,以便在您的程序因意外异常而终止时提供诊断
  • 熟悉 Debug + Windows + Threads 调试器窗口。它允许您查看其他线程中正在发生的事情,您会看到死锁。

关于c# - 从串行端口仅接收不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773654/

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