【DirectX】 AudioVideoPlayback 中的事件BUG
2018-06-17 19:11:13来源:未知 阅读 ()
当访问 Video 中的 Audio 属性时,会造成 Video 的所有事件失效。
经过反汇查看源码,原来在访问Audio属性时,Audio会通过当前Video对象创建一个新实例。
而这个新实例会覆盖掉当前的 Video 对象,因此所有之前注册的事件都会失效。
解决办法,就是利用 Audio 来进行事件注册。
但是要注意的是,必须要访问过一次 Audio,让 Audio 生成实例之后,再进行动态事件的绑定!
同时,不要再使用 Video 的静态绑定了,原先的动态绑定也没关系,因为都会失效,所以不需要取消事件绑定了。
另外:记得一定要用变量来保存Audio对象,否则每次使用 Video.Audio 访问的都是一个新创建的对象!!!
Dim vod As New Video("视频路径") Dim ado As Audio = vod.Audio '这里Audio会覆盖Video的实例 ado.Volume = -10000 '静音 ' 绑定事件 AddHandler ado.Starting, AddressOf vod_Starting AddHandler ado.Ending, AddressOf vod_Ending ' 绑定容器 vod.Owner = Panel1 vod.Owner.Width = vod.DefaultSize.Width vod.Owner.Height = vod.DefaultSize.Height ' 开始播放 vod.Play()
附一个完整的安全实例:
Dim vod As Video Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fp As String Using op As New OpenFileDialog If op.ShowDialog = Windows.Forms.DialogResult.Cancel Then Return End If fp = op.FileName End Using If vod IsNot Nothing AndAlso vod.Playing Then vod.Stop() vod.Dispose() vod = Nothing End If ' 尝试第一次视频实例化 Try vod = New Video(fp) Catch ex As Exception MsgBox("视频载入问题") Return End Try Dim ado As Audio = Nothing ' 尝试音频实例化 Try ado = vod.Audio ado.Volume = -10000 ' 尝试将事件绑定(采用Audio) AddHandler ado.Starting, AddressOf vod_Starting AddHandler ado.Ending, AddressOf vod_Ending Catch ex As Exception 'MsgBox("音频出错!") ' 音频出错表示视频没有音频,但实例化Audio即会让Video所有事件无效化,因此仍需要重新实例化一个新对象 ado.Dispose() vod.Dispose() vod = New Video(fp) ' 尝试将事件绑定(采用Video) AddHandler vod.Starting, AddressOf vod_Starting AddHandler vod.Ending, AddressOf vod_Ending End Try ' 其他设置 vod.Owner = Panel1 vod.Owner.Width = vod.DefaultSize.Width vod.Owner.Height = vod.DefaultSize.Height ' 播放~ vod.Play() End Sub Private Sub vod_Starting(ByVal sender As Object, ByVal e As System.EventArgs) ' 开始播放 End Sub Private Sub vod_Ending(ByVal sender As Object, ByVal e As System.EventArgs) vod.CurrentPosition = 0.0 '立刻重播 'vod.Play() '这行无所谓 End Sub
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- .NET中的计时器控件Timer 2018-06-21
- .NET中的访问修饰符 2018-06-21
- C# 字符串的入门 2018-06-21
- 获取checkboxlist选中的值以及绑定来自之前选中的来自数据库 2018-06-17
- 关于设计中的依赖倒置原则 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash