摄像机上的C#压缩编码,可能吗?
我有一段代码,应该重复5次,如下所示:摄像机上的C#压缩编码,可能吗?,c#,C#,我有一段代码,应该重复5次,如下所示: VideoCaptureDevice videoSource3 = new VideoCaptureDevice(videoDevices[2].MonikerString); videoSource3.DesiredFrameRate = 10; videoSourcePlayer3.VideoSource = videoSource3; videoSourcePlayer3.Start(); 所有指数3应在1到5之间变化 有什么紧凑的形式可以代替将
VideoCaptureDevice videoSource3 = new VideoCaptureDevice(videoDevices[2].MonikerString);
videoSource3.DesiredFrameRate = 10;
videoSourcePlayer3.VideoSource = videoSource3;
videoSourcePlayer3.Start();
所有指数3应在1到5之间变化
有什么紧凑的形式可以代替将这4行代码编码5次吗?首先要注意的是,拥有一个集合几乎总是比在名称后声明多个变量并使用索引更好。这样你就可以对它们进行统一的操作。诚然,UI框架通常希望每个控件都有一个变量,但这并不总是很好地发挥作用——但如果您正在寻找它,通常会有一种方法 您尚未显示
videoSourcePlayer3
初始化,但我现在假设您希望基于设备(从外观上看,这些设备已经在一个集合中)创建所有播放器
只需使用列表和循环,就可以很容易地开始这样做。我不得不猜一些名字
// Create the players
List<VideoPlayer> videoSourcePlayers = new List<VideoPlayer>();
for (int i = 0; i < 5; i++)
{
VideoCaptureDevice source = new VideoCaptureDevice(videoDevices[i].MonikerString);
source.DesiredFrameRate = 10;
VideoPlayer player = new VideoPlayer();
player.VideoSource = source;
videoSourcePlayers.Add(player);
}
// Start all the players
foreach (VideoPlayer player in videoSourcePlayers)
{
player.Start();
}
(你可以用单选,但我认为在这种情况下用两选更清楚。)你考虑过使用数组或列表吗?是的,非常简短,但是不能很好地进行。@Mikenakis如果您试图提高速度,那么使用静态对象只允许您初始化一次,然后每次更改一个值。您需要确保对象不会被多个进程同时使用。如果使用多处理,则需要在代码周围添加一个锁以防止冲突。@jdweng:我认为OP不关心效率,只关心减少代码重复。@DaisyShipton是的
List<VideoPlayer> videoSourcePlayers = new List<VideoPlayer>();
for (int i = 0; i < 5; i++)
{
videoSourcePlayers.Add(new VideoPlayer
{
VideoSource = new VideoCaptureDevice(videoDevices[i].MonikerString)
{ DesiredFrameRate = 10 }
});
}
List<VideoPlayer> videoSourcePlayers = videoDevices
.Select(device => new VideoCaptureDevice(device.MonikerString) { DesiredFrameRate = 10 })
.Select(source => new VideoPlayer { VideoSource = source })
.ToList();