摄像机上的C#压缩编码,可能吗?

摄像机上的C#压缩编码,可能吗?,c#,C#,我有一段代码,应该重复5次,如下所示: VideoCaptureDevice videoSource3 = new VideoCaptureDevice(videoDevices[2].MonikerString); videoSource3.DesiredFrameRate = 10; videoSourcePlayer3.VideoSource = videoSource3; videoSourcePlayer3.Start(); 所有指数3应在1到5之间变化 有什么紧凑的形式可以代替将

我有一段代码,应该重复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();