将参数传递给线程方法

时间:2013-05-17 00:50:19

标签: c# multithreading winforms

在此示例中,我无法将值传递给用于运行多个线程的方法。

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的值传递给线程正在调用的方法,我该怎么办?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

我通常做的是将包含我的参数的结构发送到线程。