2013-05-17 87 views
0

在此示例中,我無法將值傳遞給用於運行多個線程的方法。將參數傳遞給線程的方法

private void btnStartSingleHost_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 500; i++) 
     new System.Threading.Thread(establishConnection).Start(); 
} 

private void establishConnection() 
{ 
    new SinglePortScan(tbHostIP.Text, int.Parse(nupdHostPort.Value.ToString()), int.Parse(nupdHostTimeout.Value.ToString()), ref tbSingleResults).connect(); 
} 

我能做些什麼,如果我想爲的循環,該線程調用該方法的i例如通價值?

回答

3

使用ParametrizedThreadStart代表而不是ThreadStart委託。

private void btnStartSingleHost_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 500; i++) 
     new System.Threading.Thread(establishConnection).Start(i); 
} 

private void establishConnection(object state) 
{ 
    int i = (int)state; 
    // do whatever you want with i here 
    new SinglePortScan(tbHostIP.Text, int.Parse(nupdHostPort.Value.ToString()), int.Parse(nupdHostTimeout.Value.ToString()), ref tbSingleResults).connect(); 
} 
+0

這看起來很直截了當。 – HelpNeeder

0

我通常會發送一個包含我的參數的結構給線程。

+0

您能舉個例子嗎? – HelpNeeder