2012-08-03 43 views
2

我在设置线程内引用变量时遇到问题。在线程内设置引用变量

Error:
"Cannot use ref or out parameter 'output' inside an anonymous method, lambda expression, or query expression"

有没有什么办法让这个工作或达到类似的效果?

public static void LoadThreaded<T>(string path, ref T output) 
{ 
    ThreadStart threadStart = delegate 
    { 
     output = Loader<T>(path); 
    }; 

    new Thread(threadStart).Start(); 
} 

回答

3

的问题是,作为output被不同线程设置之前的output变量被置位(必须的)该方法返回。

最好的选择这里是使用TPL返工这一点,即:

Task<T> LoadThreaded<T>(string path) 
{ 
    return Task.Factory.StartNew(() => Loader<T>(path)); 
} 

这样您就可以启动该异步操作,并得到结果当它完成,无论是通过阻断(调用output.Result)或添加任务延续。

+0

非常感谢您快速回答。它帮助了很多。 – Bam 2012-08-03 21:23:33