1

您好,我创建了 3 个线程,但我需要它们共同使用一个数组列表来插入数据,我的问题是我创建了一个这样的线程,Thread t = new Thread(doThread);但是如果您看到 do thread 它是一种没有参数的方法,但我想传递提到的数组列表前。这是可能的 ?

4

1 回答 1

3

您可以使用ParameterizedThreadStart委托

例如,

ArrayList theList = new ArrayList(); 
Thread t = new Thread(doThread);
t.Start(theList);

只要您的代表 ,doThread具有以下匹配的签名,这将起作用:

public delegate void ParameterizedThreadStart(
    Object obj
)

有关ParameterizedStart委托的更多信息,请参见此处

编辑 - 只需阅读您将需要的不仅仅是ArrayList. 请记住,虽然它只接受一个参数,但您可以创建自己Object的包装器来包装您需要发送到该方法的所有内容。

public class SendDataExample
{
   public ArrayList myList { get; set; }
   public string myString { get; set; }
}

然后,您可以Object像这样在您的委托中使用:

public void doThread(object data)
{
    var sendDataExample = (SendDataExample)data;
    ArrayList myList = sendDataExample.myList;
    string myString = sendDataExample.myString;
    ...
}
于 2013-07-01T00:44:35.110 回答