发贴求救关于VB6定时器问题,
- VB code
Private Sub Form_Load() '打开界面时 Menu = LED_MENU '界面命名 tmrConnect.Enabled = True lpPrev = SetWindowLongA(hwnd, GWL_WNDPROC, AddressOf WndProc)End SubPrivate Sub Form_UnLoad(Cancel As Integer) '关闭界面时 tmrConnect.Enabled = False '关闭查找USB定时器 tmrData.Enabled = False '关闭USB数据发收的定时器 Menu = MAIN_MENU If lpPrev <> 0 Then lpPrev = SetWindowLongA(hwnd, GWL_WNDPROC, lpPrev) lpPrev = 0 End IfEnd SubPrivate Sub tmrConnect_Timer() '查检USB状态 Call ConnectRMC '查找USB设备 If FindTheHid = True Then '找到了 tmrConnect.Enabled = False '关闭查找 tmrData.Enabled = True '数据收发 Else tmrData.Enabled = False '没找到,关闭数据发&收 tmrConnect.Enabled = True ' End IfEnd SubPrivate Sub tmrData_Timer() '数据数据收发 '主要是以定时的方式(暂定100ms发一次)向USB设备发送数据,然后读取数据 '代码若干,不贴了End SubPublic Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '消息拦截 当有消息时候会在这里出现 If msg = WM_DEVICECHANGE Then '此次是检查USB设备的连接状态 Select Case Menu Case NET_MENU DeviceNet.tmrUSB.Enabled = True Case LED_MENU '在LED界面下,如果发生了改变时重新查找USB设备([color=#FF0000]此处设了一断点[/color]) LEDsignal.tmrConnect.Enabled = True Case CH_MENU SelectCH.tmrTelCom.Enabled = True Case Else End Select End If WndProc = CallWindowProcA(lpPrev, hwnd, msg, wParam, lParam) '返回消息给系统否则系统所有消息都被拦截 你的电脑几乎就是废了 关机都不行End Function
目的很简单,就是当打开"LED_MENU"界面时,自动检测USB设备(开启定时器tmrConnect),然后自动以定时的方式向USB设备发送数据,当界面关闭时,停止向USB设备发送数据(其实是停止定时器tmrData)。
现在出现的问题是:当我把界面关闭想停止向USB设备发送数据时,有时候会出现无法停止(强调:是有时候!!),调试发现关闭界面时,tmrConnect定时器被开启,重新查找了USB设备然后自动发送了数据,但是断点没有被响应,这让我很困惑我明明停掉了tmrConnect定时器,怎么会无端端开启了?……所以特来求助下,上面的程序应该很简单,都有注释,大伙给点耐心帮我看看。
[解决办法]
tmrConnect.Enabled=True:DoEvents '开启定时器tmrConnect
tmrData.Enabled=False:DoEvents '停止定时器tmrData
[解决办法]
不要使用定时器。程序启动时连接一次设备,以后使用 OnDeviceChange 消息尝试连接。