web-dev-qa-db-ja.com

MediaElementが再生されているかどうかを確認するにはどうすればよいですか?

簡単そうに見えますが、MediaElementの状態を判断する方法がわかりません。一部の状態(IsBufferingなど)にはさまざまなプロパティがありますが、Play、Pauseなどの状態には何も見つかりません。Silverlightにはこれらすべてを表示するCurrentStateプロパティがあるようです。

現在、ビデオが再生されているかどうかを判断する方法は、さまざまなイベントを監視し、タイマーが進行状況を確認することです。

私はMediaElementとWPFを初めて使用します(実際にはWinFormsアプリでMediaElementのみを使用しています)。足りないものはありますか?

28
Brian

あなたは何も見逃していません。メディアが再生されているかどうかを手動で追跡する必要があります。おっしゃるように、Silverlightではとても簡単なので、残念です。私には大きな見落としのようです。

31
PeterL

サブクラスMediaPlayer(これはMediaElementでも機能します)を「回避」し、Play/Pause/Stopに独自のメソッドを追加するために私が行ったこと。これらの方法では、再生ステータスを表すフィールドを維持します。また、ステータスを「再生中」から「停止」に変更できるように、MediaEndedをフックする必要があります。

8
Developer

私はユニバーサルWindows 10プラットフォームで目覚めている1つの解決策を見つけました:

 if ( yourMediaElement.CurrentState.ToString() == "Playing" ) {
 //nou yourMediaElement is playng
   }
2
Choletski

そして、Rich Sに基づいて、拡張機能を実装できます

//don't forget
using System.Windows.Controls;
using System.Reflection;


 public static class Util
    {
     public static MediaState GetMediaState(this MediaElement myMedia)
        {
            FieldInfo hlp = typeof(MediaElement).GetField("_helper", BindingFlags.NonPublic | BindingFlags.Instance);
            object helperObject = hlp.GetValue(myMedia);
            FieldInfo stateField = helperObject.GetType().GetField("_currentState", BindingFlags.NonPublic | BindingFlags.Instance);
            MediaState state = (MediaState)stateField.GetValue(helperObject);
            return state;
        }
    }
1
gian rondanelli