MediaTimeline 在關閉 Window 後繼續播放

本文关键字:播放 Window MediaTimeline | 更新日期: 2023-09-27 18:32:22

我有这个代码:

        MediaTimeline timeline = new MediaTimeline(new Uri(@path, UriKind.Relative));
        MediaClock clock = timeline.CreateClock();
        System.Windows.Media.MediaPlayer player = new System.Windows.Media.MediaPlayer();
        player.Clock = clock;
        VideoDrawing drawing = new VideoDrawing();
        drawing.Rect = new Rect(0, 0, 300, 200);
        drawing.Player = player;
        DrawingBrush brush = new DrawingBrush(drawing);
        New_WEBMPlayer_Wnd.Background = brush;

它使用一个新窗口运行,用于播放该特定文件...问题是,如果我关闭窗口,声音会继续播放。所以我猜也是视频。关闭后如何停止?

MediaTimeline 在關閉 Window 後繼續播放

您需要

通过clock停止播放器,因为播放器现在由其Clock控制。如果您直接停止播放器(而不是通过Clock),您将获得InvalidOperationException

PresentationCore 中发生了类型为"System.InvalidOperationException"的未处理异常.dll

其他信息:将时钟分配给媒体播放器时无法执行此操作。

首先,使时钟可控。

MediaClock clock = timeline.CreateClock(true) as MediaClock;

你这样阻止玩家,

if (clock.CurrentState != ClockState.Stopped)
{
    clock.Controller.Stop();
}

综上所述,工作代码如下所示

MediaTimeline timeline = new MediaTimeline(new Uri(@path, UriKind.Relative));
MediaClock clock = timeline.CreateClock(true) as MediaClock; //make the clock controllable
MediaPlayer player = new MediaPlayer();
player.Clock = clock;
VideoDrawing drawing = new VideoDrawing();
drawing.Rect = new Rect(0, 0, 300, 200);
drawing.Player = player;
DrawingBrush brush = new DrawingBrush(drawing);
New_WEBMPlayer_Wnd.Background = brush;
//stop the clock when player window is closed
New_WEBMPlayer_Wnd.Closed += (s, e) =>
{
    if (clock.CurrentState != ClockState.Stopped)
    {
        clock.Controller.Stop();
    }
};