我正在使用Windows窗体构建一个带有播放列表的简单视频播放器。播放列表是一个ListBox控件,我使用DirectShow.NET库在PictureBox控件上播放视频。
一旦图片框中加载的视频停止播放,我需要播放列表来响应(开始播放下一个视频)。我知道DirectShow在媒体完成时发送消息EC_COMPLETE。 (对于DS.NET库,它通过简称为“EventCode.Complete”的枚举来实现)
如何构建一个触发事件,以便我的播放列表在EC_COMPLETE消息触发时响应?我一直在重读MSDN上的事件,代表和事件处理,Stack Overflow和各种其他地方,但是一切似乎都是为了处理已经内置到.NET中的事件。例如,按钮点击以及所有这些。
答案 0 :(得分: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)
{
执行代码以响应感兴趣的事件。初始化包括将窗口句柄(其中一种方法)提供给Filter Graph Manager(FGM),以便在事件可用时发布窗口消息。然后,示例中的C#代码显示了如何通过WndProc
处理它并传递给上面引用的片段。
这就是在FGM上启用整个事件发布的方式:
// Have the graph signal event via window callbacks for performance
hr = this.mediaEventEx.SetNotifyWindow(this.Handle, WMGraphNotify, IntPtr.Zero);