一个ParameterizedThreadStart问题:如果方法返回一个对象,该怎么办?

时间:2009-09-29 11:09:21

标签: c#

我正在开发自己的多线程FTP客户端。我有一种方法:

 public byte[] FileData;
 FileData = sendPassiveFTPcmd("RETR " + df.Path + "/" + df.Name + "\r\n");

必须在新线程中调用(例如):

ReadBytesThread = new Thread(new ParameterizedThreadStart(sendPassiveFTPcmd));
ReadBytesThread.Start("RETR " + df.Path + "/" + df.Name + "\r\");

正如您所注意到的,这显然是错误的声明,因为“sendPassiveFTPcmd”没有返回“void”类型。如何使用返回对象的方法创建新线程?

1 个答案:

答案 0 :(得分:5)

要绕过委托签名,匿名方法(或lambda)可以提供帮助:

Thread thread = new Thread(delegate (object state) {
    // call your method here!
});

你也可以使用捕获的变量来完全避免参数...例如(这次使用lambda,以及ThreadStart的重载):

Thread thread = new Thread(() => { /* your method */ });