标题:敬请各位高手解决:vb.net2010如何判断所有多线程都已经运行完毕的问题?谢 ...
只看楼主
HVB6
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:320
专家分:561
注 册:2013-10-30
结帖率:100%
 问题点数:0 回复次数:4 
敬请各位高手解决:vb.net2010如何判断所有多线程都已经运行完毕的问题?谢谢
本人的一个程序经过测试已经正常,在此程序中,有几个过程中用到数目不等的多线程的方法,
这些多线程的运行有以下三个状况要判断(这是程序每次运行必须出现的状况之一):一、无一个多线程运行,
当几个过程运行结束时,程序结束,且用Msgbox函数通知:程序完毕。;二、不是所有的多线程运行,当几个过程和
多线程运行结束时,程序结束,且用Msgbox函数通知:程序完毕。;三、所有的多线程运行,当几个过程和多线程运行结
束时,程序结束,且用Msgbox函数通知:程序完毕。。
如上的情况,如何用代码解决。

[此贴子已经被作者于2017-9-5 08:52编辑过]

搜索更多相关主题的帖子: vb.net 判断 多线程 运行 完毕 
2017-09-05 08:48
HVB6
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:320
专家分:561
注 册:2013-10-30
得分:0 
补充:由于每次处理的问题的难度不一,程序运行完毕的时间也不一致,少则几秒,多则几分钟。
2017-09-05 09:02
HVB6
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:320
专家分:561
注 册:2013-10-30
得分:0 
以下是微软的答复,太复杂。
https://msdn.(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1
2017-09-05 17:28
HVB6
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:15
帖 子:320
专家分:561
注 册:2013-10-30
得分:0 
微软的答复,本人认为只是说明如何运行多线程,没有说到如何判断所有的多线程已经全部运行完毕。
2017-09-06 16:17
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
得分:0 
以下是引用HVB6在2017-9-6 16:17:50的发言:

微软的答复,本人认为只是说明如何运行多线程,没有说到如何判断所有的多线程已经全部运行完毕。

微软的example已经比较清晰了呀,ThreadPool提供了一个线程池,可以发送工作、处理异步、线程等待、线程记时,它的QueueUserWorkItem就是将方法排入队列,以便执行。
你可以建一个控制台应用程序,启动对象设为sub main:
程序代码:
Imports System.Diagnostics
Imports System.Threading
Module Example
    Public Delegate Sub ThreadStart()
    Public Sub Main()
        ThreadPool.QueueUserWorkItem(AddressOf ExecuteInForeground)
        Dim th1 As New Thread(AddressOf ExecuteInForeground)
        th1.Start()
        Dim th2 As New Thread(AddressOf ExecuteInForeground)
        th2.IsBackground = True
        th2.Start()
        Thread.Sleep(500)
        ThreadPool.QueueUserWorkItem(AddressOf WriteNumber)
        Dim th3 As New Thread(AddressOf WriteNumber)
        th3.IsBackground = True
        th3.Start()
        Thread.Sleep(500)
        ExecuteInForeground()
        'WriteNumber()
        MsgBox("所有线程都over了")
    End Sub

    Private Sub ExecuteInForeground()
        Dim start As DateTime = DateTime.Now
        Dim sw As Stopwatch = Stopwatch.StartNew()
        Console.WriteLine("Thread {0}: {1}, Priority {2}", _
                          Thread.CurrentThread.ManagedThreadId, _
                          Thread.CurrentThread.ThreadState, _
                          Thread.CurrentThread.Priority)
        Do
            Console.WriteLine("Thread {0}: Elapsed {1:N2} seconds", _
                              Thread.CurrentThread.ManagedThreadId, _
                              sw.ElapsedMilliseconds / 1000)
            Thread.Sleep(500)
        Loop While sw.ElapsedMilliseconds <= 5000
        sw.Stop()
    End Sub
    Private Sub WriteNumber()
        Dim i As Integer = 0
        Do
            i += 1
            Console.WriteLine(i.ToString)
        Loop While i <= 9000
    End Sub
End Module

收到的鲜花
  • HVB62017-09-18 09:43 送鲜花  7朵   附言:好文章

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2017-09-17 19:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480485-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039784 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved