导航

« 常用正则表达式实例vb.net (2008) 右键菜单弹出位置  »

vb.net (2008 2010) 多线程实例 及中止线程或取消方法

虚位以待 VB.NET

这里介绍的不是专业术语,只是有些问题的解决方法,多线程的一个比较大的作用就是可以保持用户界面的响应(不假死),这就要让子线程去做相对复杂的任务,这里会收集多线程的实例,理论可能很少,只求问题的解决。Control.CheckForIllegalCrossThreadCalls = False

例一:在webbrowser中把navigate方法用子线程去完成

折叠ASP/Visual Basic Code复制内容到剪贴板
  1. Private Sub btnGo_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles btnGo.Click   
  2.     Dim tNav As New Thread(AddressOf navUrl)   
  3.     tNav.Start()   
  4.   
  5. End Sub  
  6. Private Sub navUrl()  '导航过程   
  7.   
  8.     myUrl = txtUrl.Text   
  9.     web1.Navigate(myUrl)   
  10. End Sub  


 例二:使用控件BackgroundWorker

 

ASP/Visual Basic Code复制内容到剪贴板
  1. Private Sub BackgroundWorker2_DoWork(ByVal sender As System.ObjectByVal e2 As System.ComponentModel.DoWorkEventArgs) Handles bkWorker2Repair.DoWork   
  2.     Dim worker2 As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)   
  3.     e2.Result = RepairAccess(worker2, e2)   
  4.   
  5. End Sub  
  6.   
  7. Private Sub BackgroundWorker2_ProgressChanged(ByVal sender As ObjectByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bkWorker2Repair.ProgressChanged   
  8.     'msgInfo2("正在压缩中...", "")   
  9.   
  10. End Sub  
  11.   
  12. Private Sub BackgroundWorker2_RunWorkerCompleted(ByVal sender As ObjectByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bkWorker2Repair.RunWorkerCompleted   
  13.     'Me.Text = "good"   
  14.     'msgInfo2("正在压缩中...", "")   
  15.     ' First, handle the case where an exception was thrown.   
  16.     If Not (e.Error Is NothingThen  
  17.         MessageBox.Show(e.Error.Message)   
  18.     ElseIf e.Cancelled Then  
  19.         ' Next, handle the case where the user canceled the    
  20.         ' operation.   
  21.         msgInfo2("已取消写入""")   
  22.     Else  
  23.         ' Finally, handle the case where the operation succeeded.   
  24.         '’ msgInfo2("操作成功", "")   
  25.         'Me.Text = "ok"   
  26.     End If  
  27.     msgInfo("共:" & dataNum & "条,目前:", dataVolume)   
  28.     Me.bkWorker2Repair.CancelAsync()   
  29.     Me.bkWorker2Repair.Dispose()   
  30. End Sub  
  31.   
  32. Public Function RepairAccess(ByVal worker2 As System.ComponentModel.BackgroundWorker, ByVal e2 As System.ComponentModel.DoWorkEventArgs) As Long  
  33.     Try  
  34.         dbName = My.Settings.dbNamer   
  35.   
  36.         Dim dbName2 As String = "\" & dbName & ".mdb"  '设置数据库名  
  37.         Dim objJRO As Object = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"))  
  38.         dataNum = EXESQLScalar("select count(*) from INFO") '总数量  
  39.         objJRO.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & dbName2, "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\dataBackup.mdb")  
  40.         Kill(Application.StartupPath & dbName2)  
  41.         FileSystem.Rename(Application.StartupPath & "\dataBackup.mdb", Application.StartupPath & dbName2)  
  42.         dataVolume = MyRound(((GetFileSize(dbName)) / 1024 / 1024), 2).ToString & "M"  
  43.     Catch ex As Exception  
  44.         MsgBox("数据库名称或地址出错,请检查!", MsgBoxStyle.OkOnly)   
  45.         Exit Function  
  46.     End Try  
  47. End Function  

最后是调用

             If bwSoso.IsBusy = True Then Exit Sub
            BackgroundWorker2.RunWorkerAsync()

===========================
 取消(中止)线程的方法  

首选在某个相关停止线程的事件中写代码:  BackgroundWorker.RunWorkerAsync()  (注:作用是让BackgroundWorker.CancellationPending = True)

然后在BackgroundWorker Dowork事件中加入如下代码

 

                If  BackgroundWorker.CancellationPending = True Then

                    e.Cancel = True '中止线程 '应该写在Dowork 事件或它包含的函数或过程中

                    Exit Function  '中止函数或事件,这里是退出函数,如果是过程那就是exit sub

                End If

 

  • 顶一下
虚位以待




原创文章如转载,请注明:转载自落日故乡

本文链接地址:http://www.spersky.com/post/vb2008thread.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

内容搜索


虚位以待

常用链接

最新评论及回复

Powered By Z-Blog

Copyright spersky All Rights Reserved.Theme Moonlight,Calf modified.n 浙ICP备16017820号-1