在线程内设置引用变量

时间:2012-08-03 20:36:53

标签: c# multithreading xna

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

  

错误:
“无法在内部使用ref或out参数'output'   匿名方法,lambda表达式或查询表达式“

有没有办法让它发挥作用或达到类似的效果?

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

    new Thread(threadStart).Start();
}

1 个答案:

答案 0 :(得分:3)

问题是该方法在设置output变量之前返回(必要),因为output由不同的线程设置。

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

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

这允许您启动此异步操作,并在完成时获得结果,方法是阻止(调用output.Result)或添加任务延续。