道歉,因为我之前从未使用过事件处理程序,也不知道如何表达问题。我理解他们的概念。
我正在开发一种视频文件处理工具,可以逐帧处理视频。用户选择一组视频,应用程序将运行此代码以循环遍历它们并触发每个视频的处理:
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中将有多个文件需要处理。 (我打算将来使用线程)。
目前,此代码将处理所有帧,而不是分别处理每个视频。如何分离事件处理程序的对象以单独处理对象?
答案 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)
{
}
}