SKY外语计算机学习

标题: VB2008实现简单多线程 [打印本页]

作者: SKY晓夜    时间: 2013-11-26 08:50
标题: VB2008实现简单多线程
作者:SKY晓夜 日期:2013-11-26 原文地址:http://www.skywj.com/thread-9445-1-1.html

废话不多说,直接上源码。。。。

Public Class Form1


#Region "Shared data"
    Private mMin As Integer
    Private mMax As Integer
    Private mResults As New List(Of Integer)
    Private value As Integer
#End Region

#Region "Primary Thread methods"
    Private Sub btnStrat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStrat.Click
        ProgressBar1.Value = 0
        ListBox1.Items.Clear()
        mMin = 1
        mMax = 10000
        '启动后台线程
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
        BackgroundWorker1.CancelAsync()
    End Sub

    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As  _   
    System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        '主线程
        ProgressBar1.Value = 100 + (e.ProgressPercentage)
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As _
    System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        '后台线程完成是显示所有素数
        For Each item As String In mResults
            ListBox1.Items.Add(item)
        Next

    End Sub
#End Region

    '后台计算素数线程
#Region "Background Thread methods"
    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)         Handles BackgroundWorker1.DoWork
        mResults.Clear()

        For count As Integer = mMin To mMax Step 2
            Dim isPtime As Boolean = True
            For x As Integer = 1 To CInt(count / 2)
                For y As Integer = 1 To x
                    If x * y = count Then
                        isPtime = False
                        Exit For
                    End If
                Next
                If Not isPtime Then Exit For
            Next
            If isPtime Then
                mResults.Add(count)
            End If
            Me.BackgroundWorker1.ReportProgress(CInt((count - mMax) / (mMax - mMin) * 100))
            If Me.BackgroundWorker1.CancellationPending Then
                Exit For
            End If
        Next
    End Sub

#End Region
End Class
作者: SKY晓夜    时间: 2013-11-26 08:52
此处利用BackgroundWorker控件实现多线程,完成一个在后台计算素数的任务,主线程显示后台任务的完成进度,可以看到是两条线程是同时运行的效果。
作者: 小卢_铃    时间: 2013-11-26 10:53
那啥。,虽然看不懂VB,但是还是来顶下 嘿嘿 占个位置
作者: sky_yx    时间: 2013-11-26 15:55
表示不懂VB,不过路过支持下
作者: SKY晓夜    时间: 2013-11-27 10:46
人生若只如初见,何事西风悲画扇
作者: SKY晓夜    时间: 2013-11-27 10:47
顺便召唤个懂的人来讨论下数据共享,和其他方式实现多线程的问你
作者: 独立团-路飞    时间: 2013-12-2 15:54
回复是一种美德。。。。。。。。。。。
作者: 穆穆    时间: 2013-12-2 15:54
哇大戏




欢迎光临 SKY外语计算机学习 (http://www.skywj.com/) Powered by Discuz! X2.5