为什么我的代码不会循环?

时间:2015-07-17 17:34:40

标签: vb.net loops for-loop

对于凌乱的代码抱歉: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界面)好的,所以当选择“连续”复选框时,理论上代码应该循环无限。但是,当我按照所示选择的所有内容运行程序时,所有发生的事情都是程序单击一次然后崩溃(没有响应)。我在其他程序中尝试过这个循环的任何帮助都有效,只是没有这个代码。

3 个答案:

答案 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

的msdn文档

答案 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