从控件箱中拖拽的Timer控件,interval设了50,然后在每个Tick事件中累加了0.05s,最后的记时结果比XP系统右下角的记时慢很多,差不多一分钟慢10几秒,我知道这可能是主进程阻塞的问题,但是怎么解决呢(我要精确一点的Timer)?高手快点给我解决吧,deadline到了!!
解决方案 »
- 思路问题!!!在线等
- 请问:update为什么不能立即更新数据库
- 请问如何将这个JOSN数据 转换成DATATABLE 或者list呢。 求有用的代码
- C#自定义button控件如何定义Click事件
- 选中Excel准备导入之前,先让用户选择工作表和字段. 应该怎么写?
- 读取Excel,获取Excel的数据库 表名等等
- 一个省份选择的js问题
- 急,请大家帮忙,HttpWebRequest 获取页面的问题。
- 问题:用查询出的记录行数向WEB页里添加按钮(注:有多少记录行数就有多少按钮)并取出记录的某列值
- 关于C# Winform 的Treeview的问题
- 为什么WCF远程传输DataSet序列化后速度变慢?
- 字符加密问题
http://www.codeproject.com/KB/dotnet/ABTransClockArticle.aspx上面的源代码,需要你用email注册为网站用户后,才能下载!
回忆一下,那个地方的资料跟你说过控件箱里的Timer控件应该满足像你这样的行为?这个控件就跟你在Button上按按钮一样,是在windows消息泵机制中跟成千上万的消息一起排队的,并且当同一个timer控件的到时消息累积很多时windows还会主动丢弃一些消息。给你一个忠告,深入一点去理解控件。你要的那种Timer不可能再界面层的控件中去寻找,至少你也该从System.Threading里去去找呀!
自己看看帮助文档。
aTimer = new System.Timers.Timer(10000); // Hook up the event handler for the Elapsed event.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); // Only raise the event the first time Interval elapses.
aTimer.AutoReset = false;
aTimer.Enabled = true; Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine(); // If the timer is declared in a long-running method, use
// KeepAlive to prevent garbage collection from occurring
// before the method ends.
//GC.KeepAlive(aTimer);
} // Specify what you want to happen when the Elapsed event is
// raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("Hello World!");
}
}
aa为事件。构造函数里面的数据为时间。也就是每10000毫秒执行一次AA事件。
基于Windows消息循环,用事件方式触发
具体就和内存、CPU的运行有关了,有10毫秒左右的浮动
在 Win32 体系结构中有两种类型的线程:UI 线程和辅助线程。UI 线程绝大多数时间处于空闲状态,等待消息循环中的消息到来。一旦接收到消息,它们就进行处理并等待下一个消息到来。另外,辅助线程用来执行后台处理而且不使用消息循环。Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造函数中设置。计时器的设计目的各不相同,它们的线程处理明确地指出了这一点:
Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。Windows 计时器的精度限定为 55 毫秒。这些传统计时器要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。对于 COM 组件来说,会降低性能。
不累积,而是用Timer中用DateTime.Now来获得当前时间。
Timer本身就是一个线程
你说的是窗体的Timer控件,跟这个是不一样的