我有一个像使用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#的新手,所以我可能会遗漏一些部分。
答案 0 :(得分:1)
availablePlayers[plIndex] = rx_data;
这会在您第二次收到字符串时导致代码崩溃。不幸的是,您还捕获了IndexOutOfRangeException并关闭了端口。这将使代码完全死锁,SerialPort.Close()只能在事件处理程序返回时完成。
具体的对策:
List<string>
代替字符串[]