【发布时间】:2013-10-17 17:38:58
【问题描述】:
我的项目是vb.net 2010 windows桌面形式。 到目前为止,单线程(默认)。
如果 SUB 例程中有一个正在运行的 for...next 循环,如果触发了 buttonclick 事件并且在该事件中更改了变量,会发生什么情况?比如:程序执行是否离开了正在运行的循环?还是在 buttonclick 事件更改该变量时继续运行?
我的目标是: 如果有人单击该按钮,则 blnRequestStop 设置为 True。 在 for...next 循环中,就在“next”之前,它检查 blnRequestStop。如果为真则退出“for”循环。
我猜我需要使用线程?谁能给我一个简单的例子,好吗?
编辑: 下面的这段代码似乎工作正常。但也许你们都看到了问题?
If (btnProcess.Text = "Done!") Then
End
ElseIf (btnProcess.Text = "IMPORT") Then
bRequestStop = False
t1 = New Thread(AddressOf ProcessDo)
t1.Start()
Else
t2 = New Thread(AddressOf MyInterrupt)
t2.Start()
End If
下面是 ProcessDo 和 MyInterrupt 的简短版本:
Private Sub ProcessDo()
For each X in blahblah
'do stuff (yes, includes interface)
if (blnInterrupt) then exit For
Next X
End
End Sub
Private Sub MyInterrupt()
blnInterrupt=true
End Sub
【问题讨论】:
-
听起来你在 UI 线程中有一个长时间运行的任务。基本上你不应该那样做......
-
当您单击一个按钮时,所发生的只是事件排队(不是立即运行)。一旦您的 GUI 线程(您的
Form所在的线程是new Form("form1")'d 可用(空闲),那么它将读取队列并运行您的按钮单击事件。您的 GUI 线程将不会空闲,直到它退出 For ...下一个 SUB(我习惯了 C#,否则我会用代码回答)。看看这个msdn.microsoft.com/en-us/library/…
标签: vb.net multithreading winforms