注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

冰魂's blog

关注网络技术.

 
 
 
 
 

日志

 
 

VB.NET 多线程实例讲解  

2011-08-15 17:57:55|  分类: [脚本编程] |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这段代码相当精辟(有点夸张),代码虽少,但是几乎包括了多线程中的精髓在里面了,虽然有更加高级的同步方法,但是我这个绝对够用了!一下算法包括了 多线程中的动态建立、自定线程的分配、委托(其他语言叫 指针)、多线程同步等高级编程技术!请大牛勿喷我!

Dim TB As New Object '同步线程锁
    Dim x As Integer '线程启动索引数
    Dim k As Long '递增,做测试用
    Delegate Sub WeiTuo(ByVal txt As String, ByVal tx As String) '声明一个委托
    Dim Thd(100) As Threading.Thread '允许的最大线程
    Private Sub Task1_WT(ByVal st As String, ByVal cx As String) '委托过程
        If cx = "Task1" Then
            ListBox1.Items.Add(st & "-" & cx)
            Label1.Text = st & "-" & cx
        End If
        If cx = "Task2" Then
            ListBox1.Items.Add(st & "-" & cx)
            Label2.Text = st & "-" & cx
        End If
        If cx = "Task3" Then
            ListBox1.Items.Add(st & "-" & cx)
            Label3.Text = st & "-" & cx
        End If
        If cx = "Task4" Then
            ListBox1.Items.Add(st & "-" & cx)
            Label4.Text = st & "-" & cx
        End If
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For i As Integer = 0 To 4
            x = i
            Thd(i) = New Threading.Thread(AddressOf st)
            Threading.Thread.Sleep(10)
            Thd(i).Start()
        Next
        x = 0
    End Sub
    Sub st()
        Dim i As Int32
        Select Case x
            Case 1
                Dim WT As New WeiTuo(AddressOf Task1_WT)
                For i = 1 To 100000
                    SyncLock TB
                        k += 1
                        Me.Invoke(WT, CStr(k), "Task1") '执行指定的委托,将n传进去
                    End SyncLock
                Next
            Case 2
                Dim WT As New WeiTuo(AddressOf Task1_WT)
                For i = 1 To 100000
                    SyncLock TB
                        k += 1
                        Me.Invoke(WT, CStr(k), "Task2") '执行指定的委托,将n传进去
                    End SyncLock
                Next
            Case 3
                Dim WT As New WeiTuo(AddressOf Task1_WT)
                For i = 1 To 100000
                    SyncLock TB
                        k += 1
                        Me.Invoke(WT, CStr(k), "Task3") '执行指定的委托,将n传进去
                    End SyncLock
                Next
            Case 4
                Dim WT As New WeiTuo(AddressOf Task1_WT)
                For i = 1 To 100000
                    SyncLock TB
                        k += 1
                        Me.Invoke(WT, CStr(k), "Task4") '执行指定的委托,将n传进去
                    End SyncLock
                Next
        End Select
    End Sub

  评论这张
 
阅读(326)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017