C#利用委托进行多线程访问控件

  public  partial  class  Form1 : Form
     {
         /*
          * 界面上有一个button,和一个textbox,点击button1时,开始一个新线程,新线程中有一个方法,从0开始计数
          * 并累加,且将每一个新的数字显示到textbox1中去
          * */
         public  Form1()
         {
             InitializeComponent();
         }
 
         public  delegate  void  SetTextDelegate( int  text);
 
         private  void  button1_Click( object  sender, EventArgs e)
         {
             Thread th =  new  Thread( new  ThreadStart(SetText));
             th.Start();
         }
         private  void  SetText()
         {
             for  ( int  a=0;a<1000000;a++)
             {
                 if  (textBox1.InvokeRequired)
                 {
                     textBox1.Invoke( new  SetTextDelegate(SetTextDo), a);
                 }
             }
         }
         public  void  SetTextDo( int  i)
         {
             textBox1.Text = i.ToString();
         }
     }
  #region Windows 窗体设计器生成的代码
 
         /// <summary>
         /// 设计器支持所需的方法 - 不要
         /// 使用代码编辑器修改此方法的内容。
         /// </summary>
         private  void  InitializeComponent()
         {
             this .button1 =  new  System.Windows.Forms.Button();
             this .textBox1 =  new  System.Windows.Forms.TextBox();
             this .SuspendLayout();
             // 
             // button1
             // 
             this .button1.Location =  new  System.Drawing.Point(13, 23);
             this .button1.Name =  "button1" ;
             this .button1.Size =  new  System.Drawing.Size(75, 23);
             this .button1.TabIndex = 0;
             this .button1.Text =  "button1" ;
             this .button1.UseVisualStyleBackColor =  true ;
             this .button1.Click +=  new  System.EventHandler( this .button1_Click);
             // 
             // textBox1
             // 
             this .textBox1.Location =  new  System.Drawing.Point(145, 23);
             this .textBox1.Name =  "textBox1" ;
             this .textBox1.Size =  new  System.Drawing.Size(100, 21);
             this .textBox1.TabIndex = 1;
             // 
             // Form1
             // 
             this .AutoScaleDimensions =  new  System.Drawing.SizeF(6F, 12F);
             this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this .ClientSize =  new  System.Drawing.Size(284, 262);
             this .Controls.Add( this .textBox1);
             this .Controls.Add( this .button1);
             this .Name =  "Form1" ;
             this .Text =  "Form1" ;
             this .ResumeLayout( false );
             this .PerformLayout();
 
         }

你可能感兴趣的:(C#利用委托进行多线程访问控件)