我想在c#中创建一个Windows应用程序,它将同时调用多个线程的方法。并在Windows窗体上报告每个线程的开始和完成情况。
要调用的方法需要两个参数并返回一个对象。
请帮忙。
回复将受到高度赞赏。
提前致谢。
答案 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所有代理。您可以使它们都具有相同的回调,或者它们可以具有不同的回调。这取决于你。
希望这有帮助!