设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5469|回复: 7
打印 上一主题 下一主题

VB2008实现简单多线程

[复制链接]

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
跳转到指定楼层
楼主
发表于 2013-11-26 08:50:00 |只看该作者 |倒序浏览
作者: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
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
沙发
发表于 2013-11-26 08:52:20 |只看该作者
此处利用BackgroundWorker控件实现多线程,完成一个在后台计算素数的任务,主线程显示后台任务的完成进度,可以看到是两条线程是同时运行的效果。
回复

使用道具 评分 举报

22

主题

8

好友

1898

积分

超级版主

Rank: 8Rank: 8

生肖
星座
天秤座
性别

最佳新人 活跃会员 热心会员 灌水之王 突出贡献 优秀版主

板凳
发表于 2013-11-26 10:53:59 |只看该作者
那啥。,虽然看不懂VB,但是还是来顶下 嘿嘿 占个位置
人都有一段故事,没有精彩与否,只有感人与否
回复

使用道具 评分 举报

10

主题

4

好友

843

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
双鱼座
性别

最佳新人 活跃会员

地板
发表于 2013-11-26 15:55:53 |只看该作者
表示不懂VB,不过路过支持下
人生若只如初见,何事西风悲画扇
回复

使用道具 评分 举报

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
5#
发表于 2013-11-27 10:46:42 |只看该作者
人生若只如初见,何事西风悲画扇
回复

使用道具 评分 举报

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
6#
发表于 2013-11-27 10:47:27 |只看该作者
顺便召唤个懂的人来讨论下数据共享,和其他方式实现多线程的问你
回复

使用道具 评分 举报

1

主题

0

好友

15

积分

新手上路

Rank: 1

性别
保密
7#
发表于 2013-12-2 15:54:03 |只看该作者
回复是一种美德。。。。。。。。。。。
回复

使用道具 评分 举报

8

主题

3

好友

169

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
摩羯座
性别
保密
8#
发表于 2013-12-2 15:54:52 |只看该作者
哇大戏
回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-4-19 19:07 , Processed in 0.110994 second(s), 26 queries .

回顶部