关于VB 6 中 DoEvents 导致主窗体关闭后程序无法退出的分析

1、VB中的窗体可以不用New直接通过窗体名称引用,因为应用程序级别,相当于模块全局变量自动有一个和窗体一样的变量名,实际是引用的这个全局的变量

2、窗体模块级的变量(也就是在窗体方法外的变量)生命周期跟窗体变量一致,不会因为 Form_Unload 而释放,Form_Unload 释放的仅是窗体界面资源

3、在窗体 UnLoad 之后,调用窗体任何已经释放的windows资源将会导致窗体重新 Load

4、DoEvents(一般在循环中 会导致程序在为执行完当前过程的情况下相应窗体事件,导致窗体 Unload ,过程继续执行导致 窗体资源无法被完全释放,程序无法退出。

5、解决办法:设置全局变量 gIsExit,用Sub main() 启动程序,程序启动后设置 gIsExit = False,当Form Unload 设置 gIsExit =true;DoEvents 执行完毕之后判断一下gIsExit ,if gIsExit then Unload me exit sub. 这样就可以正常退出了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以设置定时关机,一段时间后关机 Private Sub Command1_Click() h = Combo1.Text s = Combo2.Text If (h >= 0 And h <= 23 And s >= 0 And s <= 59) Then Text1.Text = Combo1.Text + ":" + Combo2.Text Form2.Hide Else: MsgBox "你输入的数据格式不正确,是否继续?", vbOKOnly, "错误提示" End If Shell "cmd /c at text1.Text shutdown -s -t 5" End Sub Private Sub Command2_Click() Dim Savetime As Double Savetime = timeGetTime '记下开始时的时间 Form2.Hide While timeGetTime < Savetime + 3600000 '循环等待 DoEvents '转让控制权,以便让操作系统处理其它的事件 Wend Shell "cmd /c shutdown -s -t 5" Form2.Show End Sub Private Sub Command3_Click() Dim Savetime As Double Savetime = timeGetTime '记下开始时的时间 Form2.Hide While timeGetTime < Savetime + 7200000 '循环等待 DoEvents '转让控制权,以便让操作系统处理其它的事件 Wend Shell "cmd /c shutdown -s -t 5" Form2.Show End Sub Private Sub Command4_Click() Dim Savetime As Double Savetime = timeGetTime '记下开始时的时间 Form2.Hide While timeGetTime < Savetime + 18000000 '循环等待 DoEvents '转让控制权,以便让操作系统处理其它的事件 Wend Shell "cmd /c shutdown -s -t 5" Form2.Show End Sub Private Sub Command5_Click() s = InputBox("请换算成秒(1小时=3600秒,1分钟=60秒)", "多久后关机?") Dim Savetime As Double Savetime = timeGetTime '记下开始时的时间 Form2.Hide While timeGetTime < Savetime + s * 1000 '循环等待 DoEvents '转让控制权,以便让操作系统处理其它的事件 Wend Shell "cmd /c shutdown -s -t 5" Form2.Show End Sub Private Sub Command6_Click() End End Sub Private Sub Command7_Click() Shell "cmd /c shutdown -a" End Sub Private Sub Timer1_Timer() Label2.Caption = Format(Time, "h:mm") If (Text1.Text = Label2.Caption) Then Shell "cmd /c shutdown -s -t 5" Timer1.Enabled = False Form2.Show End If End Sub

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值