使用c#调用线程中的参数化方法

时间:2011-01-11 12:15:08

标签: c# multithreading

大家好 我想在线程中调用一个函数,它接受一些像

这样的参数
FTPService FtpOj = new FTPService();
 FtpOj.AvtivateFTP(item, ObjFTP, AppHelper.DoEventLog, AppHelper.DoErrorLog, AppHelper.EventMessage, strLableXmlPath, AppHelper.emailfrom);
  1. 如何在线程中调用AvtivateFTP()方法并在函数内传递参数?
  2. 我们可以在线程中只调用void类型函数吗?

2 个答案:

答案 0 :(得分:1)

我不知道FTPService来自哪里,但我希望像

这样的成员
  IAsyncReslt BeginActivate ( ) 

缺乏这种情况,你可以使用lambda:

  ThreadPool.QueueUserWorkItem( () => FtpOj.AvtivateFTP(item, ...) );

问题2:是的,但有一些解决方法,例如在TPL库中,您可以定义一个返回值的任务。

答案 1 :(得分:0)

回答你的第二个问题。您可以调用返回任何值的方法。以下是它的例子:

static void Main()
{
  Func<string, int> method = Work;
  IAsyncResult cookie = method.BeginInvoke ("test", null, null);
  //
  // ... here's where we can do other work in parallel...
  //
  int result = method.EndInvoke (cookie);
  Console.WriteLine ("String length is: " + result);
}

static int Work (string s) { return s.Length; }

此外,如果您使用的是.NET 4.0,我建议使用任务并行库(TPL)。使用TPL要容易得多。

另一个建议是,因为你有许多参数传递给函数,将它们包装在一个对象中并将该对象传递给异步方法。

希望这会有所帮助。