MediaPlayer MediaOpenned событие не запускается на классе .net - PullRequest
1 голос
/ 10 июля 2011

Я пытаюсь создать класс, в котором мой класс миниатюр захватывает фрейм как миниатюру видео, загруженных пользователями, до сих пор все шло хорошо.Сначала я записал приложение в приложение wpf, а затем решил перейти на класс на моем сайте под именем thumbnail.cs.Код такой, как показано ниже.

Моя проблема в том, что событие MediaOpenned не запускается, поэтому выполнение не может продолжаться так, как предполагалось, я попытался вызвать его сам и включил thread.sleep, чтобы обработать задержку с помощьюбуферизация видео и кода работала как я хотел.Но я не хочу полагаться на сон, потому что он может быть нестабильным из-за сервера и тяжелым. Мне нужно, чтобы он работал с событием или чем-то подобным.

Любые идеи или предложения, почему событие не являетсястрельба по .net?пока отлично работает на wpf?и что делать.

И, конечно, миллионы благодарностей!

thumbnail.cs class;

        MediaPlayer myPlayer = new MediaPlayer();
public thumbnail()
{
    myPlayer.Open(new Uri(@"C:\movie.wmv"));
    myPlayer.Play();
    myPlayer.IsMuted = true;

    //this doesn't fire up
    myPlayer.MediaOpened += new EventHandler(myPlayer_MediaOpened);

    /* 
    when i do like this it works as i want but unstable and heavy because sleep
    myPlayer_MediaOpened(null, null);
    System.Threading.Thread.Sleep(5000); 
    */
}

void myPlayer_MediaOpened(object sender, EventArgs e)
{
    myPlayer.Position = TimeSpan.FromSeconds(myPlayer.NaturalDuration.TimeSpan.Seconds / 2);
    RenderTargetBitmap RenderTarBitmap = new RenderTargetBitmap(400, 300, 1 / 96, 1 / 96, PixelFormats.Pbgra32);
    DrawingVisual DVisual = new DrawingVisual();
    DrawingContext DContext = DVisual.RenderOpen();
    DContext.DrawVideo(myPlayer, new Rect(0, 0, 400, 300));
    DContext.Close();

    RenderTarBitmap.Render(DVisual);
    myPlayer.Stop();
    BitmapFrame BMPFrame = BitmapFrame.Create(RenderTarBitmap);

    BitmapEncoder BMPEncoder = new JpegBitmapEncoder();
    System.IO.FileStream FStream = new System.IO.FileStream(@"C:\movie.jpg", System.IO.FileMode.Create);

    BMPEncoder.Frames.Add(BMPFrame);
    BMPEncoder.Save(FStream);
    FStream.Flush();
    FStream.Close();
}

--------------------------------------------

ОБНОВЛЕНИЕ:

Хорошо, так что я 'Я пытаюсь решить эту проблему уже несколько дней, и бог знает, что человек, который собирается мне помочь, прямо попадает в рай!В любом случае я обнаружил, что не могу запустить обработчики событий, связанные с MediaPlayer или моим thumbnail.cs (который размещен в app_code и вызывается веб-службой asmx).

Пробовал некоторые обходные пути с использованием потоков и реализациеймои собственные созданные обработчики событий, проверяющие, загружен фильм или нет ... не повезло, MediaPlayer не позволяет мне трогать его внутренности в другом потоке ... И я не хотел делать более хакерский подход, пока я могу решить с помощьюпростой обработчик событий!

Поискал в самом глубоком гугле, нашел ветку 2006 года, в которой кто-то предположил, что это может быть проблемой с x64 (ну, я использую x64), но я не смог ничего найти об этом на msdnи, черт возьми, прошло 5 лет!

Итак, подведу итог: у меня, вероятно, серьезное событие, не вызывающее проблем ни с моим классом, ни с моим элементом управления MediaPlayer.И мне нужен спаситель, чтобы помочь мне поймать событие mediaOpenned ..

Еще раз спасибо.

...