是否有触发媒体事件的默认时间间隔?

时间:2017-10-04 14:24:19

标签: c# wpf windows media mediaelement

我有一个WPF应用程序可以动态地将视频或图像文件(取决于用户的选择)加载到MediaElement控件。 它是视频时工作正常,并在结束视频时触发MediaEnded事件。 但是当我加载图像时,MediaEnded事件会在5秒内触发。 它是默认值吗?或者我可以通过编程方式更改它吗? 是否有任何属性可以更改此间隔或禁用此选项? 在特定行动之前是否可以暂停?

我已设置以下属性如下​​

MediaControl1.LoadedBehavior = MediaState.Manual;
MediaControl1.UnloadedBehavior = MediaState.Manual;

2 个答案:

答案 0 :(得分:2)

MediaElement是Windows Media Player的一个(非常薄的)包装器(或者更确切地说 - 使用Windows Media Player使用的相同框架)。如果您在Windows Media Player中打开图像 - 您将看到它将像播放幻灯片(即使是1张图像)一样“播放”大约5秒钟。这就是您在5秒内获得MediaEnded事件的原因 - Windows Media Player会在此期间播放带有您图像的幻灯片。我怀疑是否有办法从WPF改变这一点(因为它是外部程序\框架的行为,与MediaElement本身无关)而且我不知道如何为Windows Media Player更改此功能(甚至如果有这样的方式 - 它将具有全局效果,您可能不希望以这种方式修改您的客户端计算机。)

要解决您的问题 - 只是不要使用MediaElement来显示图片 - 请使用Image控制之类的内容。如果您有充分的理由这样做 - 您可以在加载“幻灯片”后使用MediaElement方法暂停Pause,然后它就不会触发MediaEnded事件。总而言之 - 我无法想象你真的必须使用MediaElement作为图像的任何用例。

答案 1 :(得分:0)

您可以在加载图像时重复播放媒体。像这样处理MediaEnded事件:

void me_MediaEnded(object sender, EventArgs e)
{
    //play video again
    mediaElement.Position = new TimeSpan(0, 0, 1);
    mediaElement.Play();
}

另外看到这个。它可能有所帮助: https://stackoverflow.com/a/3406857/5675763