首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

VB.NET 多线程同步有关问题

2012-02-25 
VB.NET 多线程同步问题VB.NET codePrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As

VB.NET 多线程同步问题

VB.NET code
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        url = "http://topic.csdn.net/t/20041007/15/3431114.html"
        Dim th As New System.Threading.Thread(AddressOf URL1)
        th.Start()
        MsgBox(shuju)
    End Sub

    Private Sub URL1()
        Dim s As New System.Net.WebClient()
        shuju = System.Text.Encoding.GetEncoding("gb2312").GetString(s.DownloadData(url))
    End Sub


第一次接触多线程。发现我点击玩按钮后 msgbox 直接给我弹出来了一个空内容~
也就是说下面的线程并没有执行结束但是 Button1_Click 里面的代码已经执行完毕了~

如果等待线程执行完毕后再执行 MsgBox(shuju)???

[解决办法]
VB.NET code
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        url = "http://topic.csdn.net/t/20041007/15/3431114.html"        Dim th As New System.Threading.Thread(AddressOf URL1)        th.Start()        While th.IsAlive            Application.DoEvents()            System.Threading.Thread.Sleep(5)        End While        MsgBox(shuju)    End Sub    Private Sub URL1()        Dim s As New System.Net.WebClient()        shuju = System.Text.Encoding.GetEncoding("gb2312").GetString(s.DownloadData(url))    End Sub
[解决办法]
你把MsgBox放到线程里提示。。。就不卡了。本来也应该是子线程提示主线程完事的。。。

当然直接用MsgBox在子线程里好不好另说。
[解决办法]
Public Class Form1
Dim url As String
Dim shuju As String
Private Delegate Sub showMsgbox(ByVal msg As String)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
url = "http://topic.csdn.net/t/20041007/15/3431114.html"
Dim showmsgbox As showMsgbox = AddressOf URL1
showmsgbox(url)
End Sub

Private Sub URL1()
Dim s As New System.Net.WebClient()
shuju = System.Text.Encoding.GetEncoding("gb2312").GetString(s.DownloadData(url))
MsgBox(shuju)
End Sub
End Class

热点排行