在睡眠期间无法让进程停止读取数据

时间:2018-03-20 10:59:22

标签: c# arduino rfid

我的C#代码有问题。该代码旨在读取RFID标签并基于UID,告诉数据库启动什么样的过程。我遇到的问题是当我读取一个标签并将其设置为所需的睡眠时,它会读取标签,并且基本上等待执行下一个带有UID的程序,它甚至不应该读取。

代码:

string myConnectionString = "server=" + mysql_host + ";uid=" + mysql_user + ";" + "pwd=" + mysql_pass + ";database=" + mysql_daba;
MySqlConnection connect;
connect = new MySqlConnection(myConnectionString);
string query = "SELECT * FROM Tags WHERE tagCode = @tagCode";
AutodetectArduinoPort();
try{
    ArduPort.PortName = AutodetectArduinoPort();
    ArduPort.Open();
    ArduPort.Write("startmonitor");
}
catch{ 
   Console.WriteLine("comport did not connect.");
}
int delay;
while (true){
    string tagData = ArduPort.ReadLine();
    Console.WriteLine(tagData);
    connect.Open();
    MySqlCommand command = new MySqlCommand(query, connect);
    command.Parameters.AddWithValue("@tagCode", tagData);
    MySqlDataReader reader = command.ExecuteReader();
    if (reader.Read()){
        string url = reader.GetValue(3).ToString();
        delay = Convert.ToInt32(reader.GetValue(4));
        command.Dispose();
        Process.Start(url);
        connect.Close();
        Thread.Sleep(delay);
    }               
}

2 个答案:

答案 0 :(得分:0)

如果我理解正确的话:

result = result.filter(x => x.fieldid != 'name2')

涵盖单独的库。被称为" ArduPort"。 ArduPort不受你的" Thread.Sleep(延迟)影响;"功能

如果你想暂停它的阅读能力,你必须修改ArduPort代码以实现读取之间的延迟。

无论在港口接收到什么,只需存储到您的读取线,等待后再次点火。

如果这是您想要的,您需要更改扫描代码本身,暂停读取延迟扫描。

如果我没有正确理解你,请提供:

1,您问题中的明确输入示例。

2,您的问题中有明确的预期结果。

3,一组可能的约束。

您可以提供的详细信息越多,我们就能越好地定制您的问题答案。

编辑:我的答案仍适用于串口组件。

答案 1 :(得分:0)

由于KMoussa,这最终成为了解决方案。 一旦将UID保存为字符串,我现在关闭arduport。并在循环重新启动时打开它。

string myConnectionString = "server=" + mysql_host + ";uid=" + mysql_user + ";" + "pwd=" + mysql_pass + ";database=" + mysql_daba;
            MySqlConnection connect;
            connect = new MySqlConnection(myConnectionString);
            string query = "SELECT * FROM Tags WHERE tagCode = @tagCode";
            AutodetectArduinoPort();
            while (true){
                try
                {
                    ArduPort.PortName = AutodetectArduinoPort();
                    ArduPort.Open();
                    ArduPort.Write("startmonitor");
                }
                catch
                {
                    Console.WriteLine("comport did not connect.");
                }
                int delay;
                string tagData = ArduPort.ReadLine();
                ArduPort.Close();
                Console.WriteLine(tagData);
                connect.Open();
                MySqlCommand command = new MySqlCommand(query, connect);
                command.Parameters.AddWithValue("@tagCode", tagData);
                MySqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    string url = reader.GetValue(3).ToString();
                    delay = Convert.ToInt32(reader.GetValue(4));
                    command.Dispose();
                    Process.Start(url);
                    connect.Close();
                    Thread.Sleep(delay);
                }
            }