2016-01-20 53 views
3

在C#中,我們有ParameterizedThreadStart,使我們能夠創建一個線程傳遞參數給它,像這樣:CreateAnonymousThread與參數

Thread thread = new Thread (new ParameterizedThreadStart(fetchURL)); 
thread.Start(url); 

// ... 
static void fetchURL(object url) 
{ 
    // ... 
} 

我試着用CreateAnonymousThread重現德爾福,但它似乎不接受參數。

如何創建一個匿名線程並將參數傳遞給被調用的過程?

回答

4

TThread.CreateAnonymousThread需要一個anonymous method作爲參數,所以你可以放在一起傳遞你想要的任何值的方法。這些值被捕獲,因此在傳遞參數時需要小心。有關變量捕獲的更多信息,請閱讀上面匿名方法鏈接中的「變量綁定機制」部分。

例如:

procedure DoSomething(const aWebAddress: String); 
begin 
end; 

procedure BuildThread; 
var 
    myThread: TThread; 
    fetchURL: string; 
begin 
    fetchURL := 'http://stackoverflow.com'; 
    // Create an anonymous thread that calls a method and passes in 
    // the fetchURL to that method. 
    myThread := TThread.CreateAnonymousThread(
    procedure 
    begin 
     DoSomething(fetchURL); 
    end); 
    ... 
end; 
+0

我可能會建議一個局部變量進行和'1'被分配給本地變量,而不是作爲一個恆定的,所以這是一個真正的參數。現在不是,它只是編譯到代碼中。就像'DoSomething'一樣 - 它是一個過程的常量地址,而不是一個變量,因此不是「通過」。 '1'同樣適用,現在不是參數。 –

+1

@Arioch'The我可以做到這一點。這個例子是我可以放在一起的最簡單的例子,它演示了OP向方法傳遞參數的要求。我可以簡單地將一個編譯器創建一個內部變量並通過它。我對OP的要求的理解是他/她想要將某些東西傳遞給匿名線程。它可能是一個常量或變量。 – Graymatter

+0

很好,謝謝。 –