为什么以下代码始终在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
答案 0 :(得分:0)
让我们回顾一下这里发生的事情:
匿名函数将您在obj
中存储的对象作为参数state
接收。
您使用返回值state
覆盖本地变量SomeBoolReturningFunc
。
您的原始对象未更改。
要让它以您期望的方式运行,匿名方法必须使用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
。