以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [讨论]启用与关闭计时器  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=139486)

--  作者:天一生水
--  发布时间:2019/8/13 22:07:00
--  [讨论]启用与关闭计时器
老师好!
有个秒表的例子,是用按钮按下开启计时器,再次按下关闭计时器,代码如下:
Vars("Time") = Date.Now
e.Form.TimerEnabled = not e.Form.TimerEnabled

我在一段按钮的代码中这样开启秒表:
Vars("Time") = Date.Now
e.Form.TimerEnabled = true
’msgbox(1)

然后,在代码尾部这样关闭:
Vars("Time") = Date.Now
e.Form.TimerEnabled = false

但是秒表不运行,如果在中间加入弹出窗口msgbox(1)后,秒表就可以运行,是什么原因?

--  作者:有点蓝
--  发布时间:2019/8/13 22:17:00
--  
做个例子发上来看看
--  作者:天一生水
--  发布时间:2019/8/13 22:36:00
--  
老师请测试。窗口里面第二个按钮,如果弹出个窗口msgbox(1),秒表就运行,否则不运行。
我想用标签显示秒表。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:秒表.table


[此贴子已经被作者于2019/8/13 22:42:43编辑过]

--  作者:有点蓝
--  发布时间:2019/8/13 22:45:00
--  
Sleep会停掉这个主线程,肯定不行啊。只能是使用第一个按钮的方式
--  作者:天一生水
--  发布时间:2019/8/13 22:47:00
--  
实际上是其他的代码,没用sleep
--  作者:天一生水
--  发布时间:2019/8/13 22:50:00
--  
加了一段运算代码,也不行。
Dim Sum As Integer
Dim i As Integer
For i = 1 To 10000
    Sum = Sum + i
Next 

--  作者:有点蓝
--  发布时间:2019/8/13 23:06:00
--  
窗口计时器一样会被主线程阻塞的。特别是给控件赋值的时候。如果是循环还好办,如果是某种费时操作一样没有用

计时事件
Dim t1 As Date = Vars("Time")
Dim t2 As Date = Date.Now
Dim t As TimeSpan = t2 - t1
Dim str As String
str = t.Minutes & ":" & t.Seconds & ":" & Format(t.Milliseconds,"000")
e.Form.Controls("Button1").text = str


e.Form.Controls("Label1").text = str
Application.Doevents

按钮事件
Vars("Time") = Date.Now
e.Form.TimerEnabled = True

Dim Sum As Decimal
Dim i As Decimal
For i = 1 To 1000000
    Sum = Sum + i
    Application.Doevents
Next

e.Form.TimerEnabled = False

--  作者:有点蓝
--  发布时间:2019/8/13 23:07:00
--  
真正实现需要多线程支持,参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=73365