C#程序中在性能和时间上要求比较高的程序中,我们会想到应用多线程这样可以充分利用好多核cpu的能力,缩短程序处理时间,多线程会经常涉及到传参数的情况,下面列举常用的多线程传参数方法。
1、线程委托的方法为一个类的方法,初始化类就把类的属性初始化好
2、委托的异步调用XXEventHanlder.BeginInvoke
代码实例:
//定义委托 public delegate void DoHttpRequestEventHandler(DataTable dtData, int type); DoHttpRequestEventHandler doHttpReqHandler1 = new DoHttpRequestEventHandler(this.DoHttpRequest); //调用传递参数 doHttpReqHandler1.BeginInvoke(dtPage, 1, callBack, null);
3、使用ParameterizedThreadStart委托
下面是以前写的一个监控程序的部分代码,功能主要是将监控到的错误发送邮件给相应的人员,这里所有的错误信息是是封装成一个DataTable。
定义线程要用到方法
public static void SendEmail(object obj) { DataTable dtError = (DataTable)obj; if (IsSendEmail == "1") { StringBuilder sb = new StringBuilder("监控程序检测到错误如下:<br/>"); foreach (DataRow item in dtError.Rows) { sb.AppendFormat("url: {0} ,错误信息:{1} <br/>", item["url"], item["result"]); } EmailHelper.SendMail(sb.ToString()); } }使用线程,调用方法,注意:EmailHelper是一个已经封装好了的发送邮件的共用类。
Thread threadSendEmail = new Thread(new ParameterizedThreadStart(SendEmail)); threadSendEmail.Start(dtError);以上用到了.net自带的ParameterizedThreadStart类,这个Start方法参数是object类型,可以传任意类型了,但是这个也有一个弊端就是有装箱和拆箱的性能损失。