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://mengdiqiu.com.cn/a1/C_jiaocheng/5190.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)判斷當(dāng)前操作用戶(hù)管理角色的方法
- 01-10C#使用Dispose模式實(shí)現(xiàn)手動(dòng)對(duì)資源的釋放
- 01-10C#3.0使用EventLog類(lèi)寫(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文件的方法