1

Windows フォームを使用して、プレイリストを持つ単純なビデオ プレーヤーを構築しています。プレイリストは ListBox コントロールで、DirectShow.NET ライブラリを使用して PictureBox コントロールでビデオを再生しています。

ピクチャ ボックスにロードされたビデオの再生が停止したら、プレイリストが応答する (次のビデオの再生を開始する) 必要があります。メディアの処理が完了すると、DirectShow がメッセージ EC_COMPLETE を送信することを理解しています。(DS.NET ライブラリでは、これは単に "EventCode.Complete" と呼ばれる列挙型として取得されます)

EC_COMPLETE メッセージが発生したときにプレイリストが応答するようにトリガーするイベントを作成するにはどうすればよいですか? 私は、MSDN、Stack Overflow、およびオンラインのさまざまな場所でイベント、デリゲート、およびイベント処理を 1 日中読み直していますが、すべてが .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)
        {

コードは、対象のイベントに応答して実行されます。初期化には、(メソッドの 1 つ) ウィンドウ ハンドルをフィルター グラフ マネージャー (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 に答える