2
我使用的是一個這樣的結構:如何將值傳遞給一個化名方法Task.Factory
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(url);
});
如何通過myurl的化名功能?
我使用的是一個這樣的結構:如何將值傳遞給一個化名方法Task.Factory
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(url);
});
如何通過myurl的化名功能?
只需直接使用它:
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(myurl);
});
這就是所謂的 「關閉」。
如果你不想這樣做,那麼你可以通過URL作爲另一個參數StartNew
:
string myurl = "http://google.de";
Task.Factory.StartNew(url =>
{
MessageBox.Show((string)url);
}, myurl);
這第二個版本是一點點更多的代碼,它會限制你只有一個參數(所以如果你有幾個你需要使用閉包或者將所有參數放入某個容器對象中),並且還要將該參數鍵入object
,這樣就迫使你將它轉換爲方法體中的實際參數。另一方面,優點是與關閉變量相關的開銷很小,您可以避免使用此方法。請注意,在大多數情況下,這不會是一個重要的性能問題,所以您應該使用最方便的方法,除非您有其他原因。
謝謝你的回答。但還有一個問題。如果這些值放在GUI-Controls中,是否會出現問題(交叉線程)?或者也關閉解決這個問題? – netblognet 2013-05-03 17:29:46
@netblognet如果您嘗試從非UI線程訪問控件,則會出現錯誤。你如何確保這將取決於具體情況。 – Servy 2013-05-03 17:32:35
我知道,我會收到錯誤消息。 ;)因此,當從上述示例中的控件訪問數據時,我將不得不使用答案中的第二個示例。 – netblognet 2013-05-03 17:36:27