Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET多线程无限线程_Vb.net_Multithreading - Fatal编程技术网

VB.NET多线程无限线程

VB.NET多线程无限线程,vb.net,multithreading,Vb.net,Multithreading,我的程序有一个小问题,如下所示,我想使用多个线程,但我必须将每个线程调暗,并将每个线程指定给特定的子线程,我以前做过这件事,但我很久没有使用VB.Net了,我忘了如何使用,有什么可能的帮助吗?感谢所有阅读/帮助这篇文章的人 Imports System.Threading Public Class Form1 Dim thread As System.Threading.Thread Dim ct as boolean = True Private Sub Button1_Click(se

我的程序有一个小问题,如下所示,我想使用多个线程,但我必须将每个线程调暗,并将每个线程指定给特定的子线程,我以前做过这件事,但我很久没有使用VB.Net了,我忘了如何使用,有什么可能的帮助吗?感谢所有阅读/帮助这篇文章的人

Imports System.Threading

Public Class Form1

Dim thread As System.Threading.Thread
Dim ct as boolean = True

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    thread = New System.Threading.Thread(AddressOf Main)
    thread.Start()
End Sub

Sub Main()
    Do Until ct = False
        'Executes something
    Loop
End Sub

End Class
这里有一个例子

Dim x As Integer = 1
Private Sub asd()
    Do Until x = 50
        Dim thread & x As System.Threading.Thread
        thread & x = New System.Threading.Thread(AddressOf Main)
        thread & x.Start()
        x = x + 1
    Loop
End Sub

上面是一个例子,我想要50个线程,这不起作用,它只是一个想法。

这几乎肯定是一个坏主意;多线程并不一定意味着性能更好

…但这是您的代码需要的外观:

Private Threads As New List(Of Thread)

Private Sub asd()
    For i As Integer = 1 To 50
        Dim t As New System.Threading.Thread(AddressOf Main)
        Threads.Add(t)
        t.Start()
    Next
End Sub

我只想将它们添加到
列表中
对象:

Dim Threads As New List(Of System.Threading.Thread)

Private Sub asd()
    For X As Integer = 0 To 49
        Threads.Add(New System.Threading.Thread(AddressOf Main))
        Threads(x).Start
    Next
End Sub
注意
线程
使用零开始索引


Google for Task Parallel Library和Task.run现在很少需要自己在.NET中专门创建一个新线程——通常有更好的方法。但是最好的方法完全取决于你想要实现什么,以及这个
“执行的东西实际上在做什么。@PanagiotisKanavos我已经检查过了,但无法得到实际运行的东西,我希望能得到一些解释here@Trevor你们都给出了有效的答案,这太棒了!但是我有一个小问题,我这么多线程的目的是加速我正在做的处理,为什么超过10个线程会变慢?这使用网络,我有40MBps,我想这足够了吧?对于i7-6700k也是一个问题,既然我使用了多个线程,那么将我正在做的所有进程都放在一个子线程或分割线程中是否更好?只有1个子线程,对吗?@slamyslam23更多线程并不意味着更高的性能,特别是在性能不受CPU限制的情况下。再一次,根据我最初的评论,你实际上在做什么?CPU中的线程数超过实际内核数是没有意义的,如果它不是CPU上的瓶颈,那么就更没有意义了。@JamesThorpe 1按钮执行一个sub,这是上面的答案^,它指定线程使用生成链接的sub,进入链接,检查特定字符串,如果为true,则将链接保存到记事本中;如果为true,则重新使用sub(基本上是搜索某个东西)@slamyslam23,会有大量开销切换任务,正如James提到的,除非您有一个50核的CPU,否则最终会失去性能。如果起诉一个执行50个操作的单线程更好。@Trevor我最后使用了8个线程,并将所有内容都保存在一个子线程中,以避免每个线程的工作中出现字符串错误,我非常感谢您的回复,我终于让它工作了,我的处理器的8个线程足够好了,因为我有CPU,非常感谢你的回答和有用的信息,一定要记住!你说的我都考虑过了!大家好,欢迎来到SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请阅读,并且@mhdalaalhaj我觉得你复制粘贴了我的措辞:)
Dim Threads As New List(Of System.Threading.Thread)

Private Sub asd()
  For X As Integer = 0 To 49
      Threads.Add(New System.Threading.Thread(AddressOf Main))
      Threads(x).Start
  Next
End Sub