C# 使用WPF 用MediaElement控件實(shí)現(xiàn)視頻循環(huán)播放
在WPF里用MediaElement控件,實(shí)現(xiàn)一個(gè)循環(huán)播放單一視頻的程序,同時(shí)可以控制視頻的播放、暫停、停止。
一種方式,使用MediaElement.MediaEnded事件,在視頻播放結(jié)束后,自動(dòng)重新播放;
另一種方式,使用WPF定時(shí)器,在定時(shí)器事件里寫(xiě)入視頻播放代碼。
后者優(yōu)點(diǎn)是可以控制循環(huán)時(shí)長(zhǎng),不必等到視頻播放結(jié)束就可以開(kāi)始下一次播放,比如:同時(shí)啟動(dòng)多個(gè)播放程序,使多個(gè)時(shí)長(zhǎng)不同的視頻同時(shí)播放,無(wú)限循環(huán),如果采用第一種方式,累計(jì)多次自動(dòng)播放后,視頻內(nèi)容就無(wú)法同步。
第一種方式:
XAML:
<MediaElement x:Name="mediaElement" HorizontalAlignment="Left" Height="261" VerticalAlignment="Top" Width="507"/>
<Button x:Name="btnPlay" Content="Play" HorizontalAlignment="Left" Margin="68,279,0,0" VerticalAlignment="Top" Width="75" Click="btnPlay_Click"/>
<Button x:Name="btnPause" Content="Pause" HorizontalAlignment="Left" Margin="170,279,0,0" VerticalAlignment="Top" Width="75" Click="btnPause_Click"/>
<Button x:Name="btnStop" Content="Stop" HorizontalAlignment="Left" Margin="295,279,0,0" VerticalAlignment="Top" Width="75" Click="btnStop_Click"/>
C#:
// 窗口加載事件
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// 綁定視頻文件
mediaElement.Source = new Uri("D:/bird.mp4");
// 交互式控制
mediaElement.LoadedBehavior = MediaState.Manual;
// 添加元素加載完成事件 -- 自動(dòng)開(kāi)始播放
mediaElement.Loaded += new RoutedEventHandler(media_Loaded);
// 添加媒體播放結(jié)束事件 -- 重新播放
mediaElement.MediaEnded += new RoutedEventHandler(media_MediaEnded);
// 添加元素卸載完成事件 -- 停止播放
mediaElement.Unloaded += new RoutedEventHandler(media_Unloaded);
}
/*
元素事件
*/
private void media_Loaded(object sender, RoutedEventArgs e)
{
(sender as MediaElement).Play();
}
private void media_MediaEnded(object sender, RoutedEventArgs e)
{
// MediaElement需要先停止播放才能再開(kāi)始播放,
// 否則會(huì)停在最后一幀不動(dòng)
(sender as MediaElement).Stop();
(sender as MediaElement).Play();
}
private void media_Unloaded(object sender, RoutedEventArgs e)
{
(sender as MediaElement).Stop();
}
/*
播放控制按鈕的點(diǎn)擊事件
*/
private void btnPlay_Click(object sender, RoutedEventArgs e)
{
mediaElement.Play();
}
private void btnPause_Click(object sender, RoutedEventArgs e)
{
mediaElement.Pause();
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
mediaElement.Stop();
}
第二種方式:
注:使用DispatcherTimer,需要添加System.Windows.Threading命名空間。
XAML:
<MediaElement x:Name="mediaElement" HorizontalAlignment="Left" Height="243" Margin="19,10,0,0" VerticalAlignment="Top" Width="394" LoadedBehavior ="Manual"/>
<Button x:Name="btnPlay" Content="Play" HorizontalAlignment="Left" Margin="52,270,0,0" VerticalAlignment="Top" Width="75" Click="btnPlay_Click"/>
<Button x:Name="btnPause" Content="Pause" HorizontalAlignment="Left" Margin="163,270,0,0" VerticalAlignment="Top" Width="75" Click="btnPause_Click"/>
<Button x:Name="btnStop" Content="Stop" HorizontalAlignment="Left" Margin="266,270,0,0" VerticalAlignment="Top" Width="75" Click="btnStop_Click"/>
C#:
DispatcherTimer timer = new DispatcherTimer(); // 定時(shí)器timer
int durTime = 5; // 視頻播放時(shí)長(zhǎng),也就是循環(huán)周期
// 窗口加載事件
private void Window_Loaded(object sender, RoutedEventArgs e)
{
mediaElement.Source = new Uri("D:/bird.mp4"); // 綁定視頻文件
mediaElement.Play(); // 設(shè)置啟動(dòng)播放
timer.Interval = new TimeSpan(0, 0, 0, durTime); // 設(shè)置定時(shí)器重復(fù)周期
timer.Tick += new EventHandler(timerEvent); // 設(shè)置定時(shí)器事件
timer.Start(); // 啟動(dòng)定時(shí)器
}
// 定時(shí)器事件
public void timerEvent(object sender, EventArgs e)
{
// MediaElement需要先停止播放才能再開(kāi)始播放,
// 否則會(huì)停在最后一幀不動(dòng)
mediaElement.Stop();
mediaElement.Play();
}
/*
播放控制按鈕的點(diǎn)擊事件
*/
private void btnPlay_Click(object sender, RoutedEventArgs e)
{
mediaElement.Play(); // 開(kāi)始播放
timer.Start(); // 重新啟動(dòng)定時(shí)器
}
private void btnPause_Click(object sender, RoutedEventArgs e)
{
mediaElement.Pause(); // 暫停當(dāng)前播放
timer.Stop(); // 停止定時(shí)器
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
mediaElement.Stop(); // 停止當(dāng)前播放
timer.Stop(); // 停止定時(shí)器
}
總結(jié)
以上所述是小編給大家介紹的C# 使用WPF 用MediaElement控件實(shí)現(xiàn)視頻循環(huán)播放,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)我們網(wǎng)站的支持!
上一篇:詳解C#App.config和Web.config加密
欄 目:C#教程
下一篇:WinForm IP地址輸入框控件實(shí)現(xiàn)
本文標(biāo)題:C# 使用WPF 用MediaElement控件實(shí)現(xiàn)視頻循環(huán)播放
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5190.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)判斷當(dāng)前操作用戶管理角色的方法
- 01-10C#使用Dispose模式實(shí)現(xiàn)手動(dòng)對(duì)資源的釋放
- 01-10C#3.0使用EventLog類寫(xiě)Windows事件日志的方法
- 01-10C#調(diào)用dos窗口獲取相關(guān)信息的方法
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#實(shí)現(xiàn)讀取被進(jìn)程占用的文件實(shí)現(xiàn)方法
- 01-10C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法
- 01-10C#使用windows服務(wù)開(kāi)啟應(yīng)用程序的方法
- 01-10C#線程隊(duì)列用法實(shí)例分析
- 01-10C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法


