Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在运行时在C中实例化类#_C#_Multithreading_Rfid - Fatal编程技术网

C# 如何在运行时在C中实例化类#

C# 如何在运行时在C中实例化类#,c#,multithreading,rfid,C#,Multithreading,Rfid,我正在使用一个第三方DLL,它通过以太网连接到RFID读卡器,现在我可以使用以下方式将其正常工作: private static readonly CRRU4 myReader = new CRRU4(); 然后我向它传递连接信息,其中包括IP地址和所需的不同参数 现在我的问题是,我该如何对多个IP地址执行此操作?我需要参考每个阅读器来读取RFID标签并分别处理它们 我曾想过在每个RFID读卡器中循环,连接读卡器,然后断开读卡器,但这在时间上是不可行的。我想提供更新每秒钟,连接可能需要2-3秒

我正在使用一个第三方DLL,它通过以太网连接到RFID读卡器,现在我可以使用以下方式将其正常工作:

private static readonly CRRU4 myReader = new CRRU4();
然后我向它传递连接信息,其中包括IP地址和所需的不同参数

现在我的问题是,我该如何对多个IP地址执行此操作?我需要参考每个阅读器来读取RFID标签并分别处理它们

我曾想过在每个RFID读卡器中循环,连接读卡器,然后断开读卡器,但这在时间上是不可行的。我想提供更新每秒钟,连接可能需要2-3秒才能完成


对于这样的东西,多线程可以工作吗?对于每个IP,生成一个新线程并告诉它处理一个特定的IP?

我建议创建一个读卡器列表,并为每个读卡器创建一个新线程。比如:

class Reader
{
    // other stuff
    Timer _updateTimer;

    public void Connect(ipAddress, TimeSpan pollingFrequency)
    {
        // Do the connection

        // Then set up the timer
        _updateTimer = new Timer(UpdateProc, null, 
            pollingFrequency, pollingFrequency);
    }

    private void UpdateProc(object state)
    {
        // poll the device here, and do any update
    }
}
为了创造读者:

List<Reader> _readersList = new List<Reader>();
for all devices
    var reader = new Reader();
    reader.Connect(ipAddress, TimeSpan.FromSeconds(1));
    _readersList.Add(reader);

你可以有一个读者列表。你可以很容易地添加到列表中,所以如果你需要添加一个新的,你可以。第三方库是线程安全的,它实现了并发访问吗?有多少个IP地址?每个线程一个IP地址不能很好地扩展,一个线程池可能更好。第三方dll确实支持并发访问,因为我已经创建了2个“读卡器”。我没有和第三方dll的开发人员谈过,他们的文档有点缺乏,至少可以说支持速度很慢。对我来说,测试它会比问他们更快。而且我们相信最大的读者量将在20个左右,20个独立的线程不应该是一个太大的问题,不是吗?
private object _updateLock = new object();
private void UpdateProc(object state)
{
    if (!Monitor.TryEnter(_updateLock)) return;
    try
    {
        // poll and update
    }
    finally
    {
        Monitor.Exit(_updateLock);
    }
}