C#多线程启动Square描述

学习C#语言时,经常会遇到C#多线程启动Square问题,这里将介绍C#多线程启动Square问题的解决方法。

淅川ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

在实际工作中,还需要使用到C#多线程的许多复杂特性。其中一个问题就是如何将程序的数据由线程类的构造器传入或者传出。对于放到另外一个线程中的过程,既不能传参数给它,也不能由它返回值,因为传入到线程构造器的过程是不能拥有任何参数或者返回值的。为了解决这个问题,可以将过程封装到一个类中,这样,方法的参数就可使用类中的字段。

本文给出了一个简单的例子,计算一个数的平方。为了在一个新的线程中使用这个过程,将它封装到一个类中,在一个新的C#多线程启动Square过程。

 
 
 
  1. public class SquareClass  
  2. {  
  3. publicdouble Value;  
  4. public double Square;  
  5. public void CalcSquare()  
  6. {  
  7. Square = Value * Value;  
  8. }  
  9. }  
  10. private void button1_Click(object sender, System.EventArgs e)  
  11. {  
  12. SquareClass oSquare =new SquareClass();  
  13. t2 = new Thread(new ThreadStart(oSquare.CalcSquare));  
  14. oSquare.Value = 30;  
  15. t2.Start();  

在上述例子中,线程启动后,并没有检查类中的square值,因为即使调用了线程的start方法,也不能确保其中的方法马上执行完。要从另一个线程中得到需要的值,有几种方法,其中一种方法就是在线程完成的时候触发一个事件。下面所示的代码为SquareClass加入了事件声明。

 
 
 
  1. public delegate void EventHandler(double sq);//说明委派类型  
  2. public class SquareClass  
  3. {  
  4. publicdouble Value;  
  5. public double Square;  
  6. public event EventHandler ThreadComplete;//说明事件对象  
  7. public void CalcSquare()  
  8. {  
  9. Square = Value * Value;  
  10. //指定事件处理程序  
  11. ThreadComplete+=new EventHandler(SquareEventHandler);  
  12. if( ThreadComplete!=null)ThreadComplete(Square);//触发事件  
  13. }  
  14. public static void SquareEventHandler(doubleSquare )  
  15. //定义事件处理程序  
  16. {   
  17. MessageBox.Show(Square.ToString ());}  

对于这种方法,要注意的是事件处理程序SquareEventHandler运行在产生该事件的线程t2中,而不是运行在窗体执行的线程中。以上介绍C#多线程启动Square。

分享题目:C#多线程启动Square描述
网页地址:http://www.hantingmc.com/qtweb/news11/227811.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联