从ThreadPool线程返回值

时间:2013-02-25 08:39:49

标签: vb.net multithreading threadpool

为什么以下代码始终在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

1 个答案:

答案 0 :(得分:0)

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

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

  2. 您使用返回值state覆盖本地变量SomeBoolReturningFunc

  3. 您的原始对象未更改。

  4. 要让它以您期望的方式运行,匿名方法必须使用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