代码之家  ›  专栏  ›  技术社区  ›  Don Thomas Boyle

如何通过将变量名强制转换为对象来动态启动多个线程

  •  2
  • Don Thomas Boyle  · 技术社区  · 11 年前

    不确定这会有多困难,也不确定是否涉及铸造,但这是我想要的(请使用vb.net代码)

    我想要的只是 Loop 这将创造不同的 Threads 使用不同的名称。

    dim variableName="Thread"
    for i as Integer = 0 to 5
        "dim " & variableName & (i) & "as new Threading.Thread"
    next
    

    然后启动它们

    for i as integer = 0 to 5
        variableName & i.tostring" = New Thread(New ParameterizedThreadStart(AddressOf SubOrFunction))"
        variableName & i.tostring".Start(s)
    
    1. 如何做到这一点
    2. 这实际上叫什么(术语)

    提前谢谢。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Steven Doggart    11 年前

    通常,当您想动态地为对象分配名称时,最好使用字典。在字典中,您将使用键作为动态分配的名称,并使用值作为分配该名称的对象。例如:

    Dim d As New Dictionary(Of String, MyClass)()
    
    'Add objects to dictionary
    d("dynamic name 1") = New MyClass()
    d("dynamic name 2") = New MyClass()
    
    'Get object from dictionary by name
    Dim myObject As MyClass = d("dynamic name 1")
    

    同样的方法也适用于线程,例如:

    Dim threads As New Dictionary(Of String, Thread)()
    Dim variableName = "Thread"
    For i As Integer = 0 To 5
        threads(variableName & "(" & i.ToString() & ")") = New Thread()
    Next
    

    然而,如果您所做的只是为它们分配数字索引,而不是字符串名称,那么您可以使用列表,如下所示:

    Dim threads As New List(Of Thread)()
    For i As Integer = 0 To 5
        threads.Add(New Thread())
    Next
    

    然后,您可以通过如下索引从列表中获取线程:

    Dim t As Thread = threads(1)
    

    或者,如果您有一定数量的线程,您可以很容易地使用数组:

    Dim threads(4) As Thread
    For i As Integer = 0 To 5
        threads(i) = New Thread()
    Next
    
        2
  •  1
  •   David Sdot    11 年前

    创建 Dictonary(of String, Thread) 所以你能很容易地访问它们吗

    Dim dictThread as new Dictionary(of String, Thread)
    For i as integer = 0 to 5
       dictThread.add("Thread" & i.toString, New Thread(New ParameterizedThreadStart(AddressOf SubOrFunction))
    Next
    

    启动他们

    For Each t as Thread in dictThread.Values
       t.Start(WhateverSIs)
    Next
    

    或启动特定线程: dictThread("Thread3").Start(s)

    注意:只是写的,没有测试;)