0
私は以下のコメントがあります。私はApplication.DoEvents()を呼び出すことなくそれを行うためのより良い方法を探しています。だから、MediaPlayerが正しく開くのを待つ方法
public class Player : IDisposable
{
public bool IsOpen
{
get; private set;
}
///Opens the media player. This is very fast, but the actually opening takes a bit longer.
///When it does open, it fires the MediaPlayer_MediaOpened event
public bool Open(string fileName)
{
// close previous file
Close();
mediaPlayer = new MediaPlayer();
mediaPlayer.ScrubbingEnabled = true;
mediaPlayer.MediaOpened += MediaPlayer_MediaOpened;
mediaPlayer.Open(new Uri(fileName));
return true;
}
/// <summary>
/// Fires when the MediaPlayer has finished opening.
/// </summary>
private void MediaPlayer_MediaOpened(object sender, EventArgs e)
{
totalMilliseconds = mediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds;
//40.00 represents 25 frames a second.
int totFrames = (int)(totalMilliseconds/40.00);
framePixels = new uint[mediaPlayer.NaturalVideoWidth * mediaPlayer.NaturalVideoHeight];
previousFramePixels = new uint[framePixels.Length];
for (int i = 0; i < totFrames; i++)
totalFrames.Add(TimeSpan.FromMilliseconds((((2 * i) + 1) * totalMilliseconds)/(2 * totFrames)));
IsOpen = true;
}
}
私は、オブジェクトを作成し、それを開いたとき、私はグラブフレームのように、何かを行うことができます前に解雇することMediaOpenイベントを待つ必要があります。これは私が下で待っている方法です。これは私が好きではなく、やりたいことです。
ご協力いただきありがとうございます。
'MediaOpen'がイベントであれば、代わりにポーリングの' IsOpen'性質、(イベントハンドラを追加します)そのイベントをサブスクライブし、そこから実行を続行します(つまり、 'IsOpen'をtrueに設定した' GetNextFrame'部分を上に移動し、ループを完全に省略します)。 – dlatikay
それに当てはまるなら、それは私がやることです。しかし、実際にはこれらのうちの7つを開いているので、扱いにくくなる可能性があります。 – user7049117