对于凌乱的代码抱歉:S
If CheckBox2.Checked = True Then
For i As Integer = 0 To 1 Step 0
If CheckBox1.Checked = True Then
If TextBox1.Text = lblCLickLImit.Text Then
Timer1.Stop()
TextBox1.Text = "0"
System.Windows.Forms.SendKeys.Send("{F5}")
System.Threading.Thread.Sleep(delaydelaytime)
System.Windows.Forms.SendKeys.Send("{ENTER}")
Else
If CheckBox1.Checked = False Then
If TextBox1.Text = lblCLickLImit.Text Then
Timer1.Stop()
TextBox1.Text = "0"
End If
End If
End If
Else
If CheckBox2.Checked = False Then
If CheckBox1.Checked Then
If TextBox1.Text = lblCLickLImit.Text Then
Timer1.Stop()
TextBox1.Text = "0"
System.Windows.Forms.SendKeys.Send("{F5}")
System.Threading.Thread.Sleep(delaydelaytime)
System.Windows.Forms.SendKeys.Send("{ENTER}")
End If
Else
If CheckBox1.Checked = False Then
If TextBox1.Text = lblCLickLImit.Text Then
Timer1.Stop()
TextBox1.Text = "0"
End If
End If
End If
End If
End If
Next
基本上这段代码用于自动点击器程序,(希望这会帮助你理解,http://prntscr.com/7tuc3o界面)好的,所以当选择“连续”复选框时,理论上代码应该循环无限。但是,当我按照所示选择的所有内容运行程序时,所有发生的事情都是程序单击一次然后崩溃(没有响应)。我在其他程序中尝试过这个循环的任何帮助都有效,只是没有这个代码。
答案 0 :(得分:1)
你的循环正在占用UI线程。您需要考虑使用后台工作者:
BackgroundWorker处理长时间运行的任务。在此任务执行时,它不会冻结整个程序。 (dotnetperls.com)
以下是如何设置后台工作人员的msdn演练: https://msdn.microsoft.com/en-us/library/ywkkz4s1.aspx
或强>
如果这是一个个人项目并且没有人愿意维护此代码,您可以使用Application.DoEvents()
在程序循环时继续抽取消息。这是https://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents(v=vs.110).aspx
答案 1 :(得分:0)
首先,Step
0在for
循环中没有任何意义。它可能/工作/但它会驱使任何读书它后来疯了。如果您想要无限循环,请不要使用for
循环,请使用:
While True
'code here
End While
当您确切知道所需循环的迭代次数时,将使用 For
个循环。只要某些条件为真,while
循环就会被设计为迭代。在此示例中,条件始终为true,因此它将无限循环。
您的代码也将不断旋转UI线程。它从不会暂停输入(即使你的睡眠调用也没有释放线程进行输入)。操作系统知道,您的应用已锁定,因为它永远不会处理发布到它的任何窗口消息。它仍然愉快地旋转着,直到窗户终于厌倦了它并提示你杀了它。
答案 2 :(得分:-3)
不确定您正在使用的其他“程序”,但我可以告诉您,您不希望使用For循环。你想要一个do / while循环,比如:
While True
...
End While
或
Do
...
Loop While True