方法没有与委托WaitCallback兼容的签名

时间:2015-06-12 18:40:35

标签: vb.net multithreading

我正在尝试启动(这是我的第一次)多线程,我编写了下面的代码,但我得到了错误:

  

方法没有与委托

兼容的签名

我已阅读MSDN指南,并检查了所有参数。

哪里出错?

Dim UxThr$, IdLxThr$, NumxThr%, RGxThr%, AxThr%
For CThr = 0 To LiTi.getUpperbound(1)
    UxThr = LiTi(3, CThr)
    IdLxThr = LiTi(0, CThr)
    NumxThr = CInt(LiTi(4, CThr))
    RGxThr = CInt(LiTi(1, CThr))
    AxThr = CInt(LiTi(2, CThr))

    ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf ThrP), UxThr, IdLxThr, NumxThr, RGxThr, AxThr)
Next

这些是sub(地址)的参数:

Sub ThrP(ByVal UxThr$, ByVal IdLxThr$, ByVal NumxThr%, ByVal RGxThr%, ByVal AxThr%)

1 个答案:

答案 0 :(得分:0)

QueueUserWorkItem的签名仅对对象进行回调或回调。您传递了许多变量,这就是您收到该错误的原因。创建包含CThr,UxThr,IdLxThr,NumThr等成员的结构或类,并将其单个实例传递给QueueUserWorkItem方法。此外,您需要更改ThrP方法,以便它只包含一个参数(这个新创建的类或结构)。

示例代码:

Public Structure YourStructure
    Public UxThr As String
    Public IdLxThr As String
    Public NumxThr As Integer
    Public RGxThr As Integer
    Public AxThr As Integer
End Structure

Public Sub ThrP(ByVal objInput As YourStructure)
    'Work Here
End Sub

然后您的问题中的代码变为:

    For CThr = 0 To LiTi.GetUpperBound(1)

        Dim objInput As YourStructure

        objInput.UxThr = LiTi(3, CThr)
        objInput.IdLxThr = LiTi(0, CThr)
        objInput.NumxThr = CInt(LiTi(4, CThr))
        objInput.RGxThr = CInt(LiTi(1, CThr))
        objInput.AxThr = CInt(LiTi(2, CThr))

        ThreadPool.QueueUserWorkItem(AddressOf ThrP, objInput)

    Next