Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net 2010退出功能或子功能_Vb.net_Function_Exit - Fatal编程技术网

vb.net 2010退出功能或子功能

vb.net 2010退出功能或子功能,vb.net,function,exit,Vb.net,Function,Exit,我有一个开始按钮和停止按钮 启动按钮功能正在运行 如何使用停止按钮停止此功能 Private Sub startbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click oto("x") End Sub Private Sub stopbutton_Click(ByVal sender As System.Object, ByVal e As Syst

我有一个开始按钮和停止按钮

启动按钮功能正在运行

如何使用停止按钮停止此功能

  Private Sub startbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    oto("x")
End Sub

Private Sub stopbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    'stop()
End Sub
我可以随时用按钮停止该功能

函数oto(ByVal url作为字符串)
如果CBool(InStr(LCase(anasayfa.WebBrowser1.Url.ToString),Url))=False,那么:返回False:End If
Dim sourcecode=anasayfa.WebBrowser1.Document
Dim linkler=sourcecode.GetElementsByTagName(“a”)
尺寸i=0:b=0:l=0
如果链接器计数为0,则:退出:如果结束
下一个
如果b>linkler.Count,则返回False:End If
如果b>0,则:l=b-1:anasayfa.ToolStripStatusLabel1.Text=“lgili-link-bulundu:”&linkler.Item(l).InnerHtml.ToString():linkler.Item(l).InvokeMember(“单击”):waitdocumentloading():返回真:否则:anasayfa.ToolStripStatusLabel1.Text=“lgili-link-bulundad”:返回假:如果
端函数

声明一个表单级布尔变量=False。在停止按钮的单击事件中,将其设置为true。在每个循环的内部:

If bolStop Then
    Exit Function
End If

不优雅;但它应该起作用。如果要再次启动,请在退出函数上方添加一行,以将bolStart设置回False。我刚刚注意到,注意到您的函数似乎没有返回任何内容,因此实际上应该是子线程。

您可以启动一个从UI上运行的线程,并在需要停止时中止该线程

Private t As New System.Threading.Thread(AddressOf oto)

Private Sub startbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    t.Start("x")
End Sub

Private Sub stopbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    t.Abort()
End Sub

Function oto(ByVal url As String)
    Try
        If CBool(InStr(LCase(anasayfa.WebBrowser1.Url.ToString), url)) = False Then : Return False : End If
        Dim sourcecode = anasayfa.WebBrowser1.Document
        Dim linkler = sourcecode.GetElementsByTagName("a")
        Dim i = 0 : Dim b = 0 : Dim l = 0
        If linkler.Count <= 0 Then : Return False : End If
        For Each kelime In kelimelistesi()
            i = 0
            For Each link As HtmlElement In linkler
                i = i + 1
                If Not link.GetAttribute("target") = "_blank" Then
                    If link.GetAttribute("onclick") = "" Then
                        If CBool(InStr(link.GetAttribute("href").ToString, kelime)) = True Then : b = i : Exit For : End If
                    End If
                End If
            Next
            If b > 0 Then : Exit For : End If
        Next
        If b > linkler.Count Then : Return False : End If
        If b > 0 Then
            l = b - 1
            anasayfa.ToolStripStatusLabel1.Invoke(Sub() anasayfa.ToolStripStatusLabel1.Text = "İlgili link bulundu : " & linkler.Item(l).InnerHtml.ToString())
            linkler.Item(l).InvokeMember("click")
            waitdocumentloading()
            Return True
        Else
            anasayfa.ToolStripStatusLabel1.Invoke(Sub() anasayfa.ToolStripStatusLabel1.Text = "İlgili link bulunamadı")
            Return False
        End If
    Catch ex As System.Threading.ThreadAbortException
        ' need to do something when aborting?
    End Try
    Return False
End Function
Private t作为新的System.Threading.Thread(oto的地址)
私有子开始按钮单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮6。单击
t、 开始(“x”)
端接头
Private Sub stopbutton_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮8。单击
t、 中止
端接头
函数oto(ByVal url作为字符串)
尝试
如果CBool(InStr(LCase(anasayfa.WebBrowser1.Url.ToString),Url))=False,那么:返回False:End If
Dim sourcecode=anasayfa.WebBrowser1.Document
Dim linkler=sourcecode.GetElementsByTagName(“a”)
尺寸i=0:b=0:l=0
如果链接器计数为0,则:退出:如果结束
下一个
如果b>linkler.Count,则返回False:End If
如果b>0,则
l=b-1
anasayfa.ToolStripStatusLabel1.Invoke(Sub()anasayfa.ToolStripStatusLabel1.Text=“İlgili link bulundu:”&linkler.Item(l).InnerHtml.ToString()
linkler.Item(l).InvokeMember(“单击”)
waitdocumentloading()
返回真值
其他的
anasayfa.ToolStripStatusLabel1.Invoke(Sub()anasayfa.ToolStripStatusLabel1.Text=“lgili link BULUNAAD”)
返回错误
如果结束
Catch ex As System.Threading.ThreadAbortException
“堕胎时需要做些什么?
结束尝试
返回错误
端函数
然后需要在UI线程(Control.Invoke)上调用UI线程操作。这也消除了调用Application.DoEvents的需要,因为处理不再在UI上


这是一个简单的解决方案,但在非UI线程上有更优雅的方法。您应该在线搜索该主题。

作为一个代码示例,我有一个包含多个循环的代码,最后一行是重新启动循环@ömerözer您发布的代码显示了两个循环,每个循环有一个外部循环,每个循环有一个内部循环。是的,循环的最后一行,即下一条语句,将重新启动循环。Exit Function语句将离开循环和函数并返回调用代码。您过度使用了冒号
。阅读您的代码示例非常困难。我认为总体思路不错,但请注意
Thread.Abort()
通常被认为是一个坏主意,另请参见
Private t As New System.Threading.Thread(AddressOf oto)

Private Sub startbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
    t.Start("x")
End Sub

Private Sub stopbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    t.Abort()
End Sub

Function oto(ByVal url As String)
    Try
        If CBool(InStr(LCase(anasayfa.WebBrowser1.Url.ToString), url)) = False Then : Return False : End If
        Dim sourcecode = anasayfa.WebBrowser1.Document
        Dim linkler = sourcecode.GetElementsByTagName("a")
        Dim i = 0 : Dim b = 0 : Dim l = 0
        If linkler.Count <= 0 Then : Return False : End If
        For Each kelime In kelimelistesi()
            i = 0
            For Each link As HtmlElement In linkler
                i = i + 1
                If Not link.GetAttribute("target") = "_blank" Then
                    If link.GetAttribute("onclick") = "" Then
                        If CBool(InStr(link.GetAttribute("href").ToString, kelime)) = True Then : b = i : Exit For : End If
                    End If
                End If
            Next
            If b > 0 Then : Exit For : End If
        Next
        If b > linkler.Count Then : Return False : End If
        If b > 0 Then
            l = b - 1
            anasayfa.ToolStripStatusLabel1.Invoke(Sub() anasayfa.ToolStripStatusLabel1.Text = "İlgili link bulundu : " & linkler.Item(l).InnerHtml.ToString())
            linkler.Item(l).InvokeMember("click")
            waitdocumentloading()
            Return True
        Else
            anasayfa.ToolStripStatusLabel1.Invoke(Sub() anasayfa.ToolStripStatusLabel1.Text = "İlgili link bulunamadı")
            Return False
        End If
    Catch ex As System.Threading.ThreadAbortException
        ' need to do something when aborting?
    End Try
    Return False
End Function