1

为什么以下代码总是返回False. obj我已确保SomeBoolReturningFunc正在返回True

Dim obj As Object = False
ThreadPool.QueueUserWorkItem(Sub(state)
                                  state = SomeBoolReturningFunc()
                             End Sub,
                             obj)

'Keep waiting till queued thread completes
Return obj
4

1 回答 1

0

让我们回顾一下这里发生的事情:

  1. 匿名函数接收您存储的对象obj作为参数state

  2. state你用返回值覆盖局部变量SomeBoolReturningFunc

  3. 您的原始对象没有更改。

要让它按照您期望的方式工作,匿名方法必须使用ByRef参数并且QueueUserWorkItem必须支持它。

要解决您的问题,您可以使用可变包装类:

Class Wrapper
    Public Value as Boolean
End Class

Dim obj = new Wrapper()
obj.Value = False
ThreadPool.QueueUserWorkItem(Sub(state)
                                  obj.Value=SomeBoolReturningFunc()
                             End Sub, obj)

obj.Value现在将更改为True执行匿名函数时。

于 2013-02-25T09:38:24.120 回答