C#如何使用多个对象的事件处理程序?

时间:2016-06-27 20:40:00

标签: c#

道歉,因为我之前从未使用过事件处理程序,也不知道如何表达问题。我理解他们的概念。

我正在开发一种视频文件处理工具,可以逐帧处理视频。用户选择一组视频,应用程序将运行此代码以循环遍历它们并触发每个视频的处理:

foreach (string[] item in fileList)
{
    FileVideoSource videoSource;
    videoSource = new FileVideoSource(item[1]);
    videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
    videoSource.Start();
}

这会将处理的每个新帧定向到名为" video_NewFrame"的事件处理程序。

事件处理程序如下所示:

private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) {
    try {
        this.Invoke((MethodInvoker) delegate {
            // get new frame
            Bitmap bitmap = eventArgs.Frame;

            //Process frame code...

            pictureBox1.Image = bitmap;
            Application.DoEvents();
        });
    } catch {
        Application.Exit();
    }
}

现在fileList中将有多个文件需要处理。 (我打算将来使用线程)。

目前,此代码将处理所有帧,而不是分别处理每个视频。如何分离事件处理程序的对象以单独处理对象?

1 个答案:

答案 0 :(得分:3)

你应该做的是创建一个类,其构造函数接收字符串..所有类都是循环体的作用,但是注册他的实例方法来处理事件..你只需要实例化类中的循环体并在必要时将它们保留在范围内。

class VideoProcessor
{
  private FileVideoSource videoSource;

  public VideoProcessor(string fileName)
  {
    videoSource = new FileVideoSource(fileName);        
  }

  public void Start()
  {
    videoSource.NewFrame += video_NewFrame;
    videoSource.Start();
  }

  private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
  {

  }
}