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