c#多线程传值回调发邮件显示进行状态

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Threading;
using  System.Web.Mail;

namespace  ConsoleApplication1
{
  
public   delegate   void  CallBack( bool  state,  int  count);
    
public   class  Program
    {
       
        
public   void  Show( bool  state, int  count)
        {
            Console.WriteLine(
" {0}-{1} " ,state,count);  
        }
        
static   void  Main( string [] args)
        {
            
int  tempCount  =   120 ;
            
int  tempWhileCount  =  (tempCount  /   100 *   100 ;
            
int  tempOtherCount  =  tempCount  -  tempWhileCount;

            Console.WriteLine(tempWhileCount);
            Console.WriteLine(tempOtherCount);

            
// 指定线程数
             int  size  =   10 ;
            size 
=  tempWhileCount == 0 ? ( 0 ):(tempWhileCount  <=   100   ?  ( 10 ) : (tempWhileCount  <=   1000   ?  ( 20 ) : ( 25 )));
         
            List
< MailInfo >  lall  =   new  List < MailInfo > ();
            
// 添加邮件信息
             for  ( int  i  =   0 ; i  < tempCount; i ++ )
            {
                lall.Add(
new  MailInfo( " 三毛 " +  i.ToString(), " wangdetian16 "   +  i.ToString()  +   " @qq.com " ));
            }
            
// 创建多线程
             for  ( int  i  =   0 ; i  <  size; i ++ )
            {
                ThreadData temptd 
=   new  ThreadData( new  CallBack( new  Program().Show));
                List
< MailInfo >  tempLi  =   new  List < MailInfo > ();
                
for  ( int  j  =  i  *  (tempWhileCount  /  size); j  <  (i  *  (tempWhileCount  /  size)  +  tempWhileCount  /  size); j ++ )
                {
                    tempLi.Add(lall[j]);
                }
                temptd.LisMails 
=  tempLi;
                Thread tempThread 
=   new  Thread( new  ThreadStart(temptd.Run));
                tempThread.Start();


            }
            ThreadData temptdOther 
=   new  ThreadData( new  CallBack( new  Program().Show));
            List
< MailInfo >  tempLiOther  =   new  List < MailInfo > ();
            
for  ( int  j  =  tempWhileCount; j  <  tempCount; j ++ )
            {
                tempLiOther.Add(lall[j]);
            }
            temptdOther.LisMails 
=  tempLiOther;
            Thread tempThreadOther 
=   new  Thread( new  ThreadStart(temptdOther.Run));
            tempThreadOther.Start();
            



            
// ThreadData thdata1 = new ThreadData();
            
// List<string> l1 = new List<string>();
            
// for (int i = 0; i < 1000; i++)
            
// {
            
//     l1.Add("wangdetian16"+i.ToString()+"@163.com");
            
// }
            
            
// thdata1.LisMails = l1;
            
// Thread thread = new Thread(new ThreadStart(thdata1.Run));
            
// thread.Start();

            
// ThreadData thdata2 = new ThreadData();
            
// List<string> l2 = new List<string>();
            
// for (int i = 0; i < 10; i++)
            
// {
            
//     l2.Add("wangdetian18" + i.ToString() + "@163.com");
            
// }
            
// thdata2.LisMails = l2;
            
// Thread thread1 = new Thread(new ThreadStart(thdata2.Run));
            
// thread1.Start();
            
   
        }
    }

    
public   class  ThreadData
    {
     
        
public   static   string  MailMessage  =   " {0}你好你人物要做近三分萨拉夫接撒立法精神多了几分当上了副驾驶的发生大风蓝色队服那里公司发展规划的 " ;
        
private  List < MailInfo >  _LisMails;
        
public   static   string  frommail  =   " [email protected] " ; // System.Configuration.ConfigurationManager.AppSettings["frommail"];
         public   static   string  username  =   " wangdetian116688 " ; // System.Configuration.ConfigurationManager.AppSettings["username"];
         public   static   string  password  =   " 987654321 " ; // System.Configuration.ConfigurationManager.AppSettings["password"];
         public  List < MailInfo >  LisMails
        {
            
set  {  this ._LisMails  =  value; }
            
get  {  return   this ._LisMails; }
        }
        
public  CallBack CB;
        
public  ThreadData(CallBack cb)
        {
            
this .CB  =  cb;
        }
        
public   void  Run()
        {
            
int  i  =   0 ;

            
foreach  (MailInfo s  in  LisMails)
            {
                System.Threading.Thread.Sleep(
1000 );
                Console.WriteLine(
string .Format(MailMessage,s.MailName + s.MailAddress));
                CB(
false , ++ i);
              
//   SendMail20(s.MailAddress, s.MailName, string.Format(MailMessage, s.MailName));
            }
            CB(
true , i);
        }
        
private   bool  SendMail( string  toMail,  string  subject,  string  body)
        {
            
try
            {


                
string  fromMail  =  ThreadData.frommail;
                MailMessage myMail 
=   new  MailMessage();
                myMail.From 
=  fromMail;
                myMail.To 
=  toMail;
                
// myMail.Cc = ccMail;
                
// myMail.Bcc = bccMail;
                myMail.Subject  =  subject;
                myMail.Body 
=  body;
                myMail.BodyFormat 
=  MailFormat.Html;

                
// 附件
                 string  ServerFileName  =   "" ;
                
// if (this.upfile.PostedFile.ContentLength != 0)
                
// {
                
//     string upFileName = this.upfile.PostedFile.FileName;
                
//     string[] strTemp = upFileName.Split('.');
                
//     string upFileExp = strTemp[strTemp.Length - 1].ToString();
                
//     ServerFileName = Server.MapPath(DateTime.Now.ToString("yyyyMMddhhmmss") + "." + upFileExp);
                
//     this.upfile.PostedFile.SaveAs(ServerFileName);
                
//     myMail.Attachments.Add(new MailAttachment(ServerFileName));
                
// }


                myMail.Fields.Add(
" http://schemas.microsoft.com/cdo/configuration/smtpauthenticate " 1 );
                myMail.Fields.Add(
" http://schemas.microsoft.com/cdo/configuration/sendusername " , ThreadData.username);  // 发送方邮件帐户
                myMail.Fields.Add( " http://schemas.microsoft.com/cdo/configuration/sendpassword " , ThreadData.password);  // 发送方邮件密码

                SmtpMail.SmtpServer 
=   " smtp. "   +  fromMail.Substring(fromMail.IndexOf( " @ " +   1 );
                SmtpMail.Send(myMail);

                
return   true ;
            }
            
catch
            {
                
return   false ;
            }
        }
        
private   bool  SendMail20( string  toMail,  string  subject,  string  body)
        {
            
try
            {

                System.Net.Mail.MailAddress from 
=   new  System.Net.Mail.MailAddress(ThreadData.frommail);  // 邮件的发件人
                
// string fromMail = ThreadData.frommail;
                System.Net.Mail.MailMessage myMail  =   new  System.Net.Mail.MailMessage();
                
// 设置邮件的标题
                myMail.Subject  =  subject;
                
// 设置邮件的发件人
                
// Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
                myMail.From  =  from;
                
// MailAddress(address, displayName)
                myMail.To.Add( new  System.Net.Mail.MailAddress(toMail));
               
                
/// /设置邮件的抄送收件人
                
/// /这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
                 // mail.CC.Add(new MailAddress("[email protected]", "尊敬的领导");

                
// 设置邮件的内容
                myMail.Body  =  body;
                
// 设置邮件的格式
                myMail.BodyEncoding  =  System.Text.Encoding.GetEncoding( " gb2312 " );
                myMail.IsBodyHtml 
=   true ;
                
// 设置邮件的发送级别
                myMail.Priority  =  System.Net.Mail.MailPriority.Normal;

                
// 设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
                
// string fileName = txtUpFile.PostedFile.FileName.Trim();
                
// fileName = "D:\UpFile\" + fileName.Substring(fileName.LastIndexOf("\") + 1);
                
// txtUpFile.PostedFile.SaveAs(fileName);  //  将文件保存至服务器
                
// mail.Attachments.Add(new Attachment(fileName));

                myMail.DeliveryNotificationOptions 
=  System.Net.Mail.DeliveryNotificationOptions.OnSuccess;

                System.Net.Mail.SmtpClient client 
=   new  System.Net.Mail.SmtpClient();
                
// 设置用于 SMTP 事务的主机的名称,填IP地址也可以了
                client.Host  =   " smtp. "   +  ThreadData.frommail.Substring(ThreadData.frommail.IndexOf( " @ " +   1 ); 
                
// "smtp.hotmail.com"; //  "smtp." + fromMail.Substring(fromMail.IndexOf("@") + 1);
                
// 设置用于 SMTP 事务的端口,默认的是 25
                
// client.Port = 25;
                client.UseDefaultCredentials  =   false ;
                
// 这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 [email protected], 我的用户名为 hbgx ,我的密码是 xgbh
                client.Credentials  =   new  System.Net.NetworkCredential(ThreadData.username, ThreadData.password);
                client.DeliveryMethod 
=  System.Net.Mail.SmtpDeliveryMethod.Network;
                
// 都定义完了,正式发送了,很是简单吧!
                client.Send(myMail);    

                
return   true ;
            }
            
catch
            {
                
return   false ;
            }
        }
       
    }
    
public   class  MailInfo
    {
        
public   string  MailName;
        
public   string  MailAddress;
        
public   string  MailMessage;
        
public  MailInfo( string  mailName,  string  mailAddress)
        {
            
this .MailName  =  mailName;
            
this .MailAddress  =  mailAddress;
        }
        
public  MailInfo( string  mailName,  string  mailAddress,  string  mailMessage)
        {
            
this .MailName  =  mailName;
            
this .MailAddress  =  mailAddress;
            
this .MailMessage  =  mailMessage;
        }
    } 
       
    }


 

你可能感兴趣的:(多线程,C++,c,.net,C#)