1

我正在使用 Windows 窗体构建一个带有播放列表的简单视频播放器。播放列表是一个 ListBox 控件,我使用 DirectShow.NET 库在 PictureBox 控件上播放视频。

一旦图片框中加载的视频停止播放,我需要我的播放列表做出响应(开始播放下一个视频)。我了解 DirectShow 会在媒体播放完毕后发送消息 EC_COMPLETE。(在 DS.NET 库中,这是一个简单地称为“EventCode.Complete”的枚举)

如何构造一个触发事件,以便我的播放列表在 EC_COMPLETE 消息触发时做出响应?我整天都在重新阅读 MSDN、Stack Overflow 和其他各种在线地方上的事件、委托和事件处理,但一切似乎都针对处理已内置于 .NET 中的事件。例如,按钮点击等等。

4

1 回答 1

1

DirectShow.NET 示例为您提供了如何EC_COMPLETE捕获和处理的示例。

例如,PlayWnd样本和\Samples\Players\PlayWnd\MainForm.cs文件:

    private void HandleGraphEvent()
    {
// ...
      // Process all queued events
      while(this.mediaEventEx.GetEvent(out evCode, out evParam1, out evParam2, 0) == 0)
      {
// ...
        if(evCode == EventCode.Complete)
        {

该代码是响应感兴趣的事件而执行的。初始化包括向过滤器图形管理器 (FGM) 提供(其中一种方法)您的窗口句柄,以便在事件可用时发布窗口消息。然后示例中的 C# 代码显示了如何处理它WndProc并将其传递到上面引用的片段。

这是在 FGM 上启用整个事件发布的方式:

  // Have the graph signal event via window callbacks for performance
  hr = this.mediaEventEx.SetNotifyWindow(this.Handle, WMGraphNotify, IntPtr.Zero);
于 2012-12-28T21:58:25.600 回答