c#如何从多个对象中使用事件处理程序
本文关键字:事件处理 程序 对象 | 更新日期: 2023-09-27 17:52:34
很抱歉,因为我以前从未使用过事件处理程序,也不知道如何表达这个问题。我理解他们的概念。
我正在研究一个视频文件处理工具,它可以逐帧处理视频。用户选择一组视频,应用程序将运行以下代码来循环遍历它们,并触发对每个视频的处理:
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中将有多个需要处理的文件。(我计划将来使用线程)。
目前这段代码将一起处理所有帧,而不是单独处理每个视频。我如何分离事件处理程序单独处理对象的对象?
你应该做的是创建一个类,它的构造函数接收字符串。所有类所做的就是循环体所做的,但是注册他的实例方法来处理事件。您只需要在循环体中实例化类,并在必要时将它们保留在作用域中。
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)
{
}
}