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