Visual C#多线程参数传递浅析

http://tech.ddvip.com   2007年09月06日    社区交流

内容摘要:下面就简单的介绍如何使用.NET提供的丰富的框架来实现这个功能。为了可以生动详细的介绍整个过程,我建立下面的一个.NET类,它也是要用线程启动的方法的载体。

  同样,有关委托的详细信息可以参考MSDN,上面说的非常详细。我们这里要使用到BeginInvoke和EndInvoke方法。首先我们给出传递一个参数的方法如下所示:

// passed parameter by asynchronous delegate
delegate string MyMethod3Delegate(string parameter);
private void button3_Click(object sender, System.EventArgs e) {
  MyClass instance = new MyClass();
  MyMethod3Delegate myMethod3 = new MyMethod3Delegate(instance.MyMethod3);
  myMethod3.BeginInvoke("parameterValue",new AsyncCallback(AfterMyMothod3),null);
}
public void AfterMyMothod3(IAsyncResult result){
  AsyncResult async = (AsyncResult) result;
  MyMethod3Delegate DelegateInstance = (MyMethod3Delegate) async.AsyncDelegate;
  Console.WriteLine ("函数调用返回值:{0}
", DelegateInstance.EndInvoke(result));
}

   首先为了使用委托我们声明了一个MyMethod3Delegate的委托,该委托说明一个参数和返回值为string的函数是符合条件的,所以我们在MyClass里面定义了一个MyMethod3的方法。该函数的型构符合上面的委托,所以我们可以在Button3点击的时候用这个方法实例化一个委托,然后我们使用异步的方式调用这个方法,为了得到返回结果我们写了AfterMyMothod3方法用来显示该函数的执行结果。运行程序点击Button3可以看到Output中输出的结果为MyMethod3带参数执行的结果。最后我给出如何传递多个参数的方法,我的例子是传递2个参数。代码如下:

// mutil-parameters passed
delegate string MyMutilParamsDelegate(string parameter1,string parameter2);
private void button4_Click(object sender, System.EventArgs e) {
  MyClass instance = new MyClass();
  MyMutilParamsDelegate mutilParams = new MyMutilParamsDelegate(instance.MyMutilParameters);
  mutilParams.BeginInvoke("param1","params2",new AsyncCallback(AfterMutilParams),null);
}
public void AfterMutilParams(IAsyncResult result){
  AsyncResult async = (AsyncResult) result;
  MyMutilParamsDelegate DelegateInstance = (MyMutilParamsDelegate) async.AsyncDelegate;
  Console.WriteLine ("多参数函数调用返回结果:{0}
", DelegateInstance.EndInvoke(result));
}

   由于篇幅关系代码就不作详细说明了。有不正确的地方请指正,谢谢阅读!

作者:TonyWang    责编:豆豆技术应用

正在加载评论...