同时通过多个线程调用方法并报告每个线程的进度

时间:2011-06-16 17:42:06

标签: c# winforms multithreading

我想在c#中创建一个Windows应用程序,它将同时调用多个线程的方法。并在Windows窗体上报告每个线程的开始和完成情况。

要调用的方法需要两个参数并返回一个对象。

请帮忙。

回复将受到高度赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:1)

来自http://www.albahari.com/threading/#_Entering_the_Thread_Pool_via_TPL

static void Main()
{
    Func<string, int> method = Work;
    method.BeginInvoke ("test", Done, method);
   // ...
   //
}

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

static void Done (IAsyncResult cookie)
{
    var target = (Func<string, int>) cookie.AsyncState;
    int result = target.EndInvoke (cookie);
    Console.WriteLine ("String length is: " + result);
}

基本上,“工作”是您想要在另一个线程上运行的方法。 “完成”是您在“工作”完成时要调用的方法 - 您可以在此处输入状态报告代码。 method.BeginInvoke采用与Work相同的参数,加上另外两个参数:回调和状态信息,可以是你想要的任何东西。回调函数需要一个参数:一个IAsyncResult。您可以通过获取IAsyncResult的AsyncState来访问您传入的状态信息。在上面的例子中,“target”指的是与“method”相同的东西。这很有用 - 这意味着您可以在方法/目标上调用“EndInvoke”,它将为您提供所需的返回值。 “结果”是“工作”的返回值。

如果你需要多个线程,只需要有多个代理(如上例中的“方法”),并且一个接一个地使用BeginInvoke所有代理。您可以使它们都具有相同的回调,或者它们可以具有不同的回调。这取决于你。

希望这有帮助!