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í)器事件里寫入視頻播放代碼。
后者優(yōu)點(diǎn)是可以控制循環(huán)時(shí)長(zhǎng),不必等到視頻播放結(jié)束就可以開始下一次播放,比如:同時(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)開始播放 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需要先停止播放才能再開始播放, // 否則會(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需要先停止播放才能再開始播放, // 否則會(huì)停在最后一幀不動(dòng) mediaElement.Stop(); mediaElement.Play(); } /* 播放控制按鈕的點(diǎn)擊事件 */ private void btnPlay_Click(object sender, RoutedEventArgs e) { mediaElement.Play(); // 開始播放 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ì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
C#中WebBrowser.DocumentCompleted事件多次調(diào)用問題解決方法
這篇文章主要介紹了C#中WebBrowser.DocumentCompleted事件多次調(diào)用問題解決方法,本文講解了3種情況和各自情況的解決方法,需要的朋友可以參考下2015-01-01C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能
最近小編接到一個(gè)功能需要實(shí)現(xiàn)一個(gè)提示框并且能自動(dòng)關(guān)閉的,看到這個(gè)需求真是懵了,四處搜集資料才搞定,接下來(lái)通過(guò)本文給大家分享C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能,感興趣的朋友跟隨小編一起看看吧2019-07-07c#擴(kuò)展datatable轉(zhuǎn)json示例
這篇文章主要介紹了c#擴(kuò)展datatable轉(zhuǎn)json示例,需要的朋友可以參考下2014-05-05C# 使用動(dòng)態(tài)庫(kù)DllImport("kernel32")讀寫ini文件的步驟
kernel32.dll是Windows中非常重要的32位動(dòng)態(tài)鏈接庫(kù)文件,屬于內(nèi)核級(jí)文件,這篇文章主要介紹了C# 利用動(dòng)態(tài)庫(kù)DllImport("kernel32")讀寫ini文件,需要的朋友可以參考下2023-05-05C#處理類型和二進(jìn)制數(shù)據(jù)轉(zhuǎn)換并提高程序性能
這篇文章介紹了C#處理類型和二進(jìn)制數(shù)據(jù)轉(zhuǎn)換并提高程序性能的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04