用多线程解决进度显示

来源:互联网 发布:淘宝店招模板代码 编辑:程序博客网 时间:2024/05/21 17:07

当我们要执行大量数据处理和或要执行一个执行很长时间的程序时,我们的程序为了更人性化,需要显示执行的进度,当前处理的数据,可以新开两个线程,一个于处理逻辑,一个用于显示进度

using System;
using System.Threading;

public  Thread IntanceCaller;
  public  Thread IntanceMsg;

private void btnMunalOrder_Click(object sender, System.EventArgs e)
  {
   MunalOrder munalOrder=new MunalOrder(System.Convert.ToInt32  (tboxNumber.Text),ServiceCode,listBox1,lbHadDealWith,lbSuccess,lbFail);
   ThreadStart ThreadStart1=new ThreadStart(munalOrder.start);
   ThreadStart ThreadStart2=new ThreadStart(munalOrder.disPlay);
    IntanceCaller=new Thread(new ThreadStart(ThreadStart1));
    IntanceMsg=new Thread(new ThreadStart(ThreadStart2));

   IntanceCaller.Start();
   IntanceMsg.Start();
  }

Business:

public class MunalOrder
 {
  private static string conn=System.Configuration.ConfigurationSettings.AppSettings["connStr"].ToString();

  /////////////////////////////////////////////////
  public string ServiceCode;
  public ListBox lBox;
  public Label lbHadDealWith;
  public Label lbSuccess;
  public Label lbFail;
  public int oneDealWithNumber;
  private AutoResetEvent myResetEvent=new AutoResetEvent(false);
  public string message;
  public string lbHadDealWithMessage;
  public string lbSuccessMessage;
  public string lbFailMessage;
  /////////////////////////////////////////////////  
  public MunalOrder(int Number,string ywdm,ListBox listBox1,Label lbHadDealWith1,Label lbSuccess1,Label lbFail1)
  {
   oneDealWithNumber=Number;
   ServiceCode=ywdm;
   lBox=listBox1;  
   lbHadDealWith=lbHadDealWith1;
   lbSuccess=lbSuccess1;
   lbFail=lbFail1;
  }
  public void start()
  {
      conn.Open()
      addPhone();
      conn.Close();
  }
  public void disPlay()
  {
   while (true)
   {
    myResetEvent.WaitOne();
    lBox.Items.Insert(0,message);
    lbHadDealWith.Text=lbHadDealWithMessage;
    lbSuccess.Text=lbSuccessMessage;
    lbFail.Text=lbFailMessage;
   }
  }

  private void addPhone()
  {
    .........//逻辑处理
      lbHadDealWithMessage=System.Convert.ToString(System.Convert.ToInt32(lbHadDealWith.Text)+1);
      lbSuccessMessage=System.Convert.ToString(System.Convert.ToInt32(lbSuccess.Text)+1);
      lbFailMessage=lbFail.Text;
      myResetEvent.Set();
     
    }
     }
 }
}