timer定时器,本来就是非精确的,且最小触发时间不是1毫秒,也做不到20毫秒一触发。
创新互联公司从2013年成立,先为石棉等服务建站,石棉等地企业,进行企业商务咨询服务。为石棉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
它的最小触发时间大概是10多毫秒。有人说是55毫秒,但可以做以下测试(新建一个程序测试)
设置触发间隔为20毫秒:
Private Sub Timer1_Timer()
Static n As Integer
Print Timer
n = n + 1
If n 15 Then Timer1.Enabled = False
End Sub
1427.281
1427.328
1427.359
1427.39
1427.421
1427.453
1427.484
1427.515
1427.546
1427.578
1427.609
1427.64
1427.671
1427.703
1427.734
1427.765
因为事件内包含了简单的计算和打印会占用一定的时间,平均一下大概是30多毫秒。
你要想准确,可以用多媒体定时器,百度一下多媒体定时器(API:GetTickCount),然后试试。
使用多线程。
如果操作时候长了,就把查询操作放在多线程里去执行,不要在窗体的主线程里执行。
因为定时器是通过Windows消息来实现的,而你的数据库操作阻塞了窗口线程,所以,窗口无法处理Windows消息。
动画的帧播放也是如此。
/----------------------
那就创建一条线程,然后在线程里执行数据库操作啊!
参见 System.Threading.Thread 对象。
在VB.NET中,带框架窗体的大小是不能为0的,要想做到高、宽都为0,需要自己重绘一个无边框窗体,用外置图片来绘制,配合PS做一些图片,既可以换肤还能做的很漂亮。
按当前代码修改,你把下面的代码粘回去就可以了,窗体的高和宽达到最小时,循环会自己退出,避免无限循环;
Select Case 2
Case Is = 1
Dim w As Integer = Me.Width
Do
Me.Width -= 5 : w -= 5
Threading.Thread.Sleep(3)
Loop While Me.Width = w
Case Is = 2
Dim h As Integer = Me.Height
Do
Me.Height -= 5 : h -= 5
Threading.Thread.Sleep(3)
Loop While Me.Height = h
Case Is = 3
Do
Me.Opacity -= 0.05
Threading.Thread.Sleep(120)
Loop Until Me.Opacity = 0
End Select
vb.net有的版本timer子程序读取子程序外面的全局变量有时出错,要么升级到高版本如2008(我使2005就有这个问题),要么在窗口上插个Label1并使 Label1.Hide() ,以后就用Label1.Text代替flag2,实际上Label1的名称可以改如v_flag2。换句话说是用控件值代替全局变量。
是不是另一台电脑是vista 及以上版本的系统 ?
用管理员模式。试试