WPF 怎么判断MediaElement视频播放完成

    WPF MediaElement控件中没有属性可以直接判断视频是否被播放完了,那要怎么判断视频是否播放完成呢?

    其实我们可以使用订阅MediaEnded事件,当视频播放完后,会触发该事件。

   MediaElement.MediaEnded Event:在媒体结束时发生。

    Namespace:
        System.Windows.Controls
    Assembly:
        PresentationFramework.dll

    下面我们来看示例:xaml中添加MediaElement控件,并赋予name值。

<Window x:Class="Software.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        
        mc:Ignorable="d" x:Name="mainWin"  FontFamily="微软雅黑"
        WindowStartupLocation="CenterScreen" WindowStyle="None" 
        Title="MainWindow" Height="1040" Width="1920" Loaded="mainWin_Loaded">
    <Grid>       
        <MediaElement Name="myMedia" LoadedBehavior ="Manual" UnloadedBehavior="Stop" Visibility="Hidden"/>
    </Grid>
</Window>

    后台实现:m_IsVoicePlayEnd :控制是否要播放下一个视频文件,在播放开始的时候,m_IsVoicePlayEnd 设置为false,等待视频播放完成后,触发MediaEnded事件,在该事件中重新对MediaEnded赋值为true。然后继续播放下一个视频。

private bool VoicePlayBack(string voicePath)
{
	try
	{
		if (!string.IsNullOrEmpty(voicePath))
		{
			if (System.IO.File.Exists(voicePath))
			{
				m_IsVoicePlayEnd = false;
				Application.Current.Dispatcher.Invoke(() =>
				{
					this.myMedia.Stop();
					this.myMedia.Source = null;
					this.myMedia.Position = new TimeSpan(0, 0, 0);
					this.myMedia.Close();
					this.myMedia.Source = new Uri(voicePath, UriKind.Relative);
					this.myMedia.ScrubbingEnabled = true;
					this.myMedia.Volume = 100;
					this.myMedia.MediaEnded += MyMedia_MediaEnded;
					this.myMedia.Play();
				});
			}
			else
				return false;
		}
		else
			return false;

		return true;
	}
	catch(Exception ex)
	{
		Console.WriteLine(ex);
		m_IsVoicePlayEnd = true;
		return false;
	}
}

//订阅MediaEnded事件
private void MyMedia_MediaEnded(object sender, RoutedEventArgs e)
{
	try
	{
		this.myMedia.MediaEnded -= MyMedia_MediaEnded;
	}
	finally
	{
		m_IsVoicePlayEnd = true;
	}
}

    这里要注意个是因为多次订阅MediaEnded该事件,所以每一次视频播放完成后都要取消MediaEnded该事件的订阅,否则下次播放结束后,会多次触发MediaEnded该事件。

********************************************************************************************************************************************

相关推荐

  1. WPF 怎么判断MediaElement视频播放完成

    2024-01-07 07:00:06       55 阅读
  2. js怎么判断视频链接是否能播放

    2024-01-07 07:00:06       31 阅读
  3. Vue实现视频播放

    2024-01-07 07:00:06       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 07:00:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 07:00:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 07:00:06       82 阅读
  4. Python语言-面向对象

    2024-01-07 07:00:06       91 阅读

热门阅读

  1. 构建SaaS数据分析和反馈体系的最佳实践

    2024-01-07 07:00:06       83 阅读
  2. sd-webui-EasyPhoto win 安装笔记

    2024-01-07 07:00:06       61 阅读
  3. IDEA TODO

    IDEA TODO

    2024-01-07 07:00:06      53 阅读
  4. kafka生产者设置ack、消费者设置自动提交实例

    2024-01-07 07:00:06       63 阅读
  5. 基于单片机的护理床控制器设计

    2024-01-07 07:00:06       55 阅读
  6. element ui图片上传组件封装+校验黑白照片

    2024-01-07 07:00:06       54 阅读
  7. 思科路由器忘记密码怎么重置

    2024-01-07 07:00:06       65 阅读