Я пытаюсь создать класс, в котором мой класс миниатюр захватывает фрейм как миниатюру видео, загруженных пользователями, до сих пор все шло хорошо.Сначала я записал приложение в приложение 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 ..
Еще раз спасибо.