2012-08-03 76 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