在事件处理程序方法中(在运行时)具有唯一对象名称的类实例化
本文关键字:对象 唯一 实例化 程序 事件处理 方法 运行时 | 更新日期: 2023-09-27 18:05:36
我已经搜索了很多解决方案,但没有找到任何。我有一个服务器应用程序(在。net中)接收来自多个设备的视频流。我用来解码和处理流的库不是线程安全的。我的库的名字是"VideoProcessor"和一个VideoProcessor类。
在我的主程序中,我想为每个设备创建一个VideoProcessor实例。我的第一种方法是使用一个连接事件处理程序,它为新设备实例化VideoProcessor。然而,当多个设备试图连接时,它将永远无法工作。请参考下面的代码片段: static void HandleVideoConnectionEvent(int port, string deviceId)
{
VideoProcessor vid = new VideoProcessor(port, deviceId);
}
如您所见,每次新设备连接时,我都会覆盖vid。我已经没有主意了。我需要为每个设备运行一个单独的VideoProcessor实例,并且我必须跟踪哪个实例用于哪个设备。我最后的希望是为新设备连接生成一个新进程,并维护一个deviceid列表及其相应的PID(我不知道这在。net中是否可能)。请帮助。一定有一个简洁的方法来做这件事。非常感谢您的宝贵时间。
问候。
使用Dictionary类:
static Dictionary<string, VideoProcessor> processors =
new Dictionary<string, VideoProcessor();
static void HandleVideoConnectionEvent(int port, string deviceId)
{
processors.Add(deviceId, new VideoProcessor(port, deviceId));
}
然后您可以通过deviceId查找VideoConnection类。如:
static VideoProcessor GetVideoProcessor(string deviceId)
{
return processors[deviceId];
}
当然,您需要进行完整性检查,例如确保deviceId不存在于字典中(字典必须具有唯一的键,或唯一的deviceId,并确保当您尝试从字典中获取它时,deviceId实际上存在)