等待线程完成后再继续

时间:2013-05-01 17:18:46

标签: vb.net multithreading

我有许多线程需要运行(大约160个)创建文件然后将它们复制到不同的地方:

'Files is basically a list of strings
'which is passed to a function that creates a file from a number of database fields
'when thats done it copies it to a number of places

       For Each x In Files
            Dim Evaluator = New Thread(Sub() API.Files.Create.Standard(x))
            Evaluator.Start()
        Next

我想要它做的是触发160个左右的线程(带有许可者x),然后等待所有线程完成,然后继续执行程序的其余部分。

1 个答案:

答案 0 :(得分:7)

如果您使用的是Framework 4.0(适用于3.5 Jon Skeet,解决方案@ Can I use the task parallel library in a .Net 3.5 project?)。您可以使用TPL(任务处理库)而不是使用Thread。它是Threads的包装器。简而言之,创建任务并且它具有静态方法Task.WailAll,它允许预期的功能。

Dim tasks = New Task(160) {}
For i As var = 0 To 160
    Dim x = i
    tasks(i) = Task.Factory.StartNew(Function() New CreateFileClass(x).[Do]())
Next

Task.WaitAll(tasks)

我使用了来自Task Parallel Library - Know when all tasks are finished的代码,并使用上面代码生成的在线C#到VB.Net转换器。我希望它有所帮助。