Vb.net 在参数化线程中分配布尔值从函数开始

Vb.net 在参数化线程中分配布尔值从函数开始,vb.net,multithreading,function,variable-assignment,Vb.net,Multithreading,Function,Variable Assignment,我在使用ParameterizedThreadStart为布尔数据类型分配值时遇到问题,它返回时总是显示False 这是我的密码: 'smth Frm_ChkHash.Show() Frm_ChkHash.BringToFront() Dim BoolH As Boolean Dim thdC = New Thread(New ParameterizedThreadStart(Function() BoolH = Frm_ChkHash.MatchHash(Keyl))) thdC.Start

我在使用ParameterizedThreadStart为布尔数据类型分配值时遇到问题,它返回时总是显示False

这是我的密码:

'smth
Frm_ChkHash.Show()
Frm_ChkHash.BringToFront()

Dim BoolH As Boolean
Dim thdC = New Thread(New ParameterizedThreadStart(Function() BoolH = Frm_ChkHash.MatchHash(Keyl)))
thdC.Start() 
'smth (Wait the thread until exit)
Debug.WriteLine("It is " & BoolH)
'smth
Debug.WriteLineIt为&BoolH,在BoolH中显示False

试图将其设置为可为空的Dim BoolH?作为布尔值,它在布尔值上不显示任何内容

这是我的Frm_ChkHash.MatchHash函数代码:

Public Function MatchHash(ByVal Keyl As String) As Boolean

    Dim nameApp As String = dicLbl.Item(Keyl)
    Debug.WriteLine("Hey! I am checking " & nameApp)

    Thread.Sleep(1500)
    InitHsh()
    Thread.Sleep(2000)

    Dim GetHash As String = KHash.GenerateHash(pathFile, HashCheck.HashType.SHA1) 
    'The KHash.GenerateHash returns a String.
    Thread.Sleep(1500)

    'Find the Actual Hash in the Dictionary through the key.
    Dim ActualHash As String = dicHsh.Item(Keyl)
    Debug.WriteLine("The actual hash is: " & ActualHash)

    Dim StrCmp_Hash As Boolean = StringComparer.OrdinalIgnoreCase.Equals(ActualHash, GetHash)
    Debug.WriteLine("The hash is " & CStr(StrCmp_Hash))

    If StrCmp_Hash = True Then

        Debug.WriteLine("The hash is correct!")
        Debug.WriteLine("It is cool: " & dicHsh.Item(Keyl))
        Debug.WriteLine("And I get : " & GetHash)

        Thread.Sleep(1500)
        Hide()

        Return True

    Else

        Debug.WriteLine("I get" & GetHash & "But it is" & dicHsh.Item(Keyl))

        Thread.Sleep(1500)
        Hide()
        Return False

    End If

    Hide()

End Function
我的输出窗口如下所示:

Hey! I am checking ThisApp <--- This comes from MatchHash function The actual hash is: E2133C93F55C7DF4EA44DC0F5455F4A2EE637E8B The hash is True The hash is correct! It is cool: E2133C93F55C7DF4EA44DC0F5455F4A2EE637E8B And I get : E2133C93F55C7DF4EA44DC0F5455F4A2EE637E8B The thread 0x8cc has exited with code 0 (0x0). <--- IDK where this line comes form It is <--- The function had returned. ( After `thdC.start()` )
非常感谢您的帮助。

问题在于您的delegetate是您的委托中的“=”运算符,它充当比较运算符,而不是赋值运算符

它所做的是:

Function() 
    return BoolH = Frm_ChkHash.MatchHash(Keyl)
End If
这就是为什么BoolH是空的,如果你让它为空

如果要将BoolH赋值,请使用“Sub”而不是“Function”,或使委托成为多行语句

Dim thdC = New Thread(New ParameterizedThreadStart(Sub() BoolH = Frm_ChkHash.MatchHash(Keyl)))
或:

并不是说后者现在没有返回值

Dim thdC = New Thread(New ParameterizedThreadStart(Function() 
        BoolH = Frm_ChkHash.MatchHash(Keyl)
    End Function)