vb.net DoEvents的奇怪问题!!!

a3212b12 2012-12-21 11:39:59
今天 使用 vb.net DoEvents碰到一个很奇怪的问题,就是DoEvents后面的代码不执行。

程序是在一个函数内,启动了一个timer做一些工作,然后主函数等待,检查某个变量,知道这个变量为某值,才结束等待,并返回相应的值。被主函数检查的变量, 在timer事件中处理程序中赋值。

大概的例子可能是如下:故障现象是:主过程中 str1 = fun1()前面的语句能正常执行,后面的程序不会运行。调试监控后发现:程序 运行到 Application.DoEvents() 结束,不会再继续运行。

而且这一现象不是没回都出现,而是有时发生,有时不发生。

不知各位有没有碰到次问题。

--------示例代码:-----------------------

Sub main1()
。。。。。。
Dim str1 As String
str1 = fun1()
。。。。。。
End Sub



Function fun1() As String
t1 = New Timer()
t1.Interval = 2000
AddHandler t1.Tick, AddressOf t1_Tick
Dim ii As Int16
t1.Start()
For ii = 0 To 2 Step 0

If v_xx = 1 Then
Exit For
End If
Application.DoEvents()
Next
Return v_xx.ToString
End Function

Dim t1 As Timer
Dim v_xx As UInt16 = 0
Private Sub t1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
Try
t1.Stop()
If read_data() = True Then
v_xx = 1
End If
Catch ex As Exception
Finally
If v_xx <> 1 Then
t1.Start()
End If
End Try
End Sub

Function read_data() As Boolean '读取数据,例如串口通讯程序
'具体代码
。。。。。。
End Function
...全文
171 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a3212b12 2013-01-17
  • 打赏
  • 举报
回复
引用 7 楼 sosoben 的回复:
http://bbs.csdn.net/topics/390200153 参考我以前问过的一个帖子吧 ,里面有版主提的建议,
我的办法就是和那个版主的一样,关键是等待的时候(DoEvents)出错后,错误不不能捕获,而且程序不再往下执行,直接终止无反应。
sosoben 2012-12-24
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390200153 参考我以前问过的一个帖子吧 ,里面有版主提的建议,
良朋 2012-12-21
  • 打赏
  • 举报
回复
你用串口读数据线程去调用你的TIMER里面的事件试试? '触发接收事件 Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Me.Invoke(New EventHandler(AddressOf "Timer事件")) '调用 End If End Sub
水猿兵团五哥 2012-12-21
  • 打赏
  • 举报
回复
有可能你点了三次你不知道 鼠标有问题了吧
a3212b12 2012-12-21
  • 打赏
  • 举报
回复
为什么我只提交一次,论坛却出3个帖?
a3212b12 2012-12-21
  • 打赏
  • 举报
回复
引用 3 楼 itleon 的回复:
你用串口读数据线程去调用你的TIMER里面的事件试试? '触发接收事件 Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived……
这样的方法,是用事件驱动,发信息后,要响应接收信息引发的事件,才接收到信息,这样的话,发送和接收的关联性不太好,我是想做在一个函数中,比如我发一个读命令后,接收的的信息与我的命令是关联的。
a3212b12 2012-12-21
  • 打赏
  • 举报
回复
引用 3 楼 itleon 的回复:
你用串口读数据线程去调用你的TIMER里面的事件试试? '触发接收事件 Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived……
你这种办法还是一样。
a3212b12 2012-12-21
  • 打赏
  • 举报
回复
[quote=引用 2 楼 machong8183 的回复:] 有可能你点了三次你不知道 鼠标有问题了吧[/quot] 也许是吧!

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧