在Visual C++下开发,使用习惯了多媒体定时器,但是在.Net下开发时,发现并没有提供组件级别的多媒体定时器。使用C#开发的话,需要自己引入,自己定义一堆导入的代码,使用起来实在时不方便啊。
实在没办法了,利用C++/CLI封装一个多媒体定时器,用于在.Net下的开发使用。其中的类说明大致如下:
// 摘要:
// 多媒体定时器的类, C++/CLI封装 1)可以采用委托的方式执行, 显示数据可以采用消息实现 2)可以采用异步对象的方式执行 3)采用Win32自顶一下消息方式执行
// 其中1), 2)为互斥, 只要指定了窗口句柄和自定义消息, 该消息均会触发
public class MmTimerNet : IDisposable
{
// 摘要:
// 设置或获取被执行的委托
public MmTimerNet.DgMmTimerShot MmTimerShot;
// 摘要:
// 构造函数
public MmTimerNet();
// 摘要:
// 设置或获取WPF异步调用方法对象
public System.Windows.Threading.Dispatcher DispatcherObj { get; set; }
//
// 摘要:
// 获取或设置定时器的使能状态
public bool Enable { get; set; }
//
// 摘要:
// 接收消息的窗口句柄
public ValueType Handle { get; set; }
//
// 摘要:
// 获取或设置定时器的触发周期, ms
public ushort Interval { get; set; }
//
// 摘要:
// 获取或设置定时器的触发方式, 0触发一次, 1按给定的周期触发
public ushort ShotMode { get; set; }
//
// 摘要:
// 设置自定义消息的值, 必须大于0x0400,否则无效 获取自定义小消息的值
public uint ShotWindowMsg { get; set; }
//
// 摘要:
// 设置或获取WinForm异步调用方法对象
public ISynchronizeInvoke SynchronizeObj { get; set; }
//
// 摘要:
// 获取定时器的ID
public ushort TimerID { get; }
//
// 摘要:
// 获取定时器的分辨率, ms
public static ushort TimerRes { get; }
// 摘要:
// 异步调用触发的事件
public event EventHandler<EventArgs> Tick;
// 摘要:
// 析构函数
public override sealed void Dispose();
[HandleProcessCorruptedStateExceptions]
protected virtual void Dispose(bool A_0);
protected void raise_Tick(object value0, EventArgs value1);
// 摘要:
// 多媒体定时器触发执行的委托类型
public delegate void DgMmTimerShot();
}
该类可用于.Net 4.0及以上的C#、VB.NET、C++/CLI下的开发,包括Winform和WPF应用程序。
示例代码在Windows 7和Windows XP上运行均正常运行界面分别如下图,详细使用方法可以参见代码。运行时需要msvcp120.dll动态库的支持,可不能忘记哦!