C#委托基础系列原于2011年2月份发表在我的新浪博客中,现在将其般至本博客。

例一

 
  
  1. delegate void AppendStringCallback(string text);  
  2.  
  3. private void AppendString(string txt)  
  4. {  
  5.      this.listView1.Items.Add(txt);  
  6. }  
  7.  
  8.  
  9. private void ReceiveDate()  
  10. {  
  11.      AppendStringCallback appendStringCallback = new AppendStringCallback(AppendString);  
  12.      this.Invoke(appendStringCallback, new object[]   
  13.                    { string.Format("{0},{1},{2}", str1, str2 + "号", iepAddress.ToString()) });  
  14. }  
  15.  

 

例二

 
  
  1. namespace ThreadPoolDemo    
  2. {    
  3.     public partial class ThreadForm : Form    
  4.     {    
  5.         // 定义delegate以便Invoke时使用    
  6.         private delegate void SetProgressBarValue(int value);     
  7.          
  8.  
  9.         // 跟SetProgressBarValue委托相匹配的方法    
  10.         private void SetProgressValue(int value)    
  11.         {    
  12.            progressBar.Value = value;    
  13.         }    
  14.  
  15.         // 使用Invoke方法来设置进度条    
  16.         private void RunWithInvoke()    
  17.         {    
  18.             int value = progressBar.Value;    
  19.             while (value< progressBar.Maximum)    
  20.             {    
  21.                 // 如果是跨线程调用    
  22.                 if (InvokeRequired)    
  23.                 {    
  24.                     this.Invoke(new SetProgressBarValue(SetProgressValue), value++);    
  25.                 }    
  26.                 else   
  27.                 {    
  28.                     progressBar.Value = ++value;    
  29.                 }    
  30.             }    
  31.         }     
  32.  
  33.         public ThreadForm()    
  34.         {    
  35.             InitializeComponent();    
  36.         }     
  37.       
  38.         private void btnInvoke_Click(object sender, EventArgs e)    
  39.         {    
  40.             progressBar.Value = 0;    
  41.             Thread thread = new Thread(new ThreadStart(RunWithInvoke));    
  42.             thread.Start();    
  43.         }     
  44.  
  45.      }    
  46. }   

细节可以参看我的新浪博客 http://blog.sina.com.cn/s/blog_67aaf4440100omf1.html

本文参考自金旭亮老师的《.NET 4.0面向对象编程漫谈》有关代理的内容