【DirectX】 AudioVideoPlayback 中的事件BUG
当访问 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 = - '静音 ' 绑定事件 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 = - ' 尝试将事件绑定(采用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
【DirectX】 AudioVideoPlayback 中的事件BUG的更多相关文章
- onbeforeunload与a标签在IE中的冲突bug(转载)
onbeforeunload与a标签在IE中的冲突bug onbeforeunload 是window的一个事件,目前Firefox,IE都支持,主要用来提示用户是否真的要离开该页面,通常在一些比 ...
- React 中阻止事件冒泡的问题
在正式开始前,先来看看 JS 中事件的触发与事件处理器的执行. JS 中事件的监听与处理 事件捕获与冒泡 DOM 事件会先后经历 捕获 与 冒泡 两个阶段.捕获即事件沿着 DOM 树由上往下传递,到达 ...
- C++中的事件分发
本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...
- javascript中的事件冒泡和事件捕获
1.事件冒泡 IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).以下面的HTML ...
- jQuery文本框中的事件应用
jQuery文本框中的事件应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
- 四、jquery中的事件与应用
当用户浏览页面时,浏览器会对页面代码进行解释或编译--这个过程实质上是通过时间来驱动的,即页面在加载时,执行一个Load事件,在这个事件中实现浏览器编译页面代码的过程.时间无论在页面元素本身还是在元素 ...
- ActiveX(二)Js 监听 ActiveX中的事件
在上一篇随笔:ActiveX(一)第一个简单的Demo 中,已经可以实现 js 单向调用 ActiveX 中的方法,在很多情况下ActiveX中的方法的执行时相对耗时.耗性能的.在这样的情况下.Act ...
随机推荐
- Spring ConversionService 类型转换(一)Converter
Spring ConversionService 类型转换(一)Converter Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.h ...
- Spring ApplicationContext(五)invokeBeanFactoryPostProcessors
Spring ApplicationContext(六)BeanPostProcessor 产生回顾一下 ApplicationContext 初始化的几个步骤:第一步是刷新环境变量:第二步是刷新 b ...
- IOS代码片段
2017-08-03 获取应用程序委托FKAppDelegate* appDelegate = [UIApplication shareApplication].delegate 2017-08-03 ...
- python之web开发“三剑客”
# django import django # flask import flask # tornado import tornado
- windows mysql绿色版配置
MySQL绿色版安装 1.下载地址 https://dev.mysql.com/downloads/mysql/ 2.配置my.ini 文件 解压下载文件到指定目录.如: my.ini文件内容: [m ...
- ubuntu卸载软件命令,apt-get remove
第一步,apt-get remove xxx :就是卸载xxx 或者 apt-get remove --purge xxx :卸载xxx并清除配置. 这两条命令对于依赖则是不管的.因为别的软件可 ...
- java中的标识符、关键字、保留字
Java中关键字(keyword)和保留字(reservedword) Keyword :Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等. Reserv ...
- Hibernate关联关系配置(一对多,一对一,多对多)
一对多 创建两个类 Manager(一这一端) Worker(多这一端) 即一个经理下有多个员工 package com.hibernate.n21; import java.util.HashS ...
- JAVA 面试题及思考
==================================== =======学而时习之======================== ===================== 1. p ...
- HDOJ1024--Max Sum Plus Plus(动态规划)UnSolved
Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we ...