程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#委托基礎——Invoke與委托

C#委托基礎——Invoke與委托

編輯:C#入門知識

 

C#委托基礎系列原於2011年2月份發表在我的新浪博客中,現在將其般至本博客。

 

例一

[csharp] 
delegate void AppendStringCallback(string text); 
 
private void AppendString(string txt) 

     this.listView1.Items.Add(txt); 

 
  
 
private void ReceiveDate() 
 

 
     AppendStringCallback appendStringCallback = new AppendStringCallback(AppendString); 
 
     this.Invoke(appendStringCallback, new object[] { string.Format("{0},{1},{2}", str1, str2 
 
                 + "號", iepAddress.ToString()) }); 
 

delegate void AppendStringCallback(string text);

private void AppendString(string txt)
{
     this.listView1.Items.Add(txt);
}

 

private void ReceiveDate()

{

     AppendStringCallback appendStringCallback = new AppendStringCallback(AppendString);

     this.Invoke(appendStringCallback, new object[] { string.Format("{0},{1},{2}", str1, str2

                 + "號", iepAddress.ToString()) });

}


 

 

例二

[csharp]
namespace ThreadPoolDemo   
{   
    public partial class ThreadForm : Form   
    {   
        // 定義delegate以便Invoke時使用    
        private delegate void SetProgressBarValue(int value);    
        
 
        // 跟SetProgressBarValue委托相匹配的方法    
        private void SetProgressValue(int value)   
       {   
           progressBar.Value = value;   
       } 
 
 
        // 使用Invoke方法來設置進度條    
        private void RunWithInvoke()   
        {   
            int value = progressBar.Value;   
            while (value< progressBar.Maximum)   
            {   
                //如果是跨線程調用    
                if (InvokeRequired)   
                {   
                    this.Invoke(new SetProgressBarValue(SetProgressValue), value++);   
                }   
                else  
                {   
                    progressBar.Value = ++value;   
                }   
            }   
        }    
 
 
        public ThreadForm()   
        {   
            InitializeComponent();   
        }    
     
        private void btnInvoke_Click(object sender, EventArgs e)   
        {   
            progressBar.Value = 0;   
            Thread thread = new Thread(new ThreadStart(RunWithInvoke));   
            thread.Start();   
        }    
 
     }   

namespace ThreadPoolDemo 

    public partial class ThreadForm : Form 
    { 
        // 定義delegate以便Invoke時使用 
        private delegate void SetProgressBarValue(int value);  
      

        // 跟SetProgressBarValue委托相匹配的方法 
        private void SetProgressValue(int value) 
       { 
           progressBar.Value = value; 
       }


        // 使用Invoke方法來設置進度條 
        private void RunWithInvoke() 
        { 
            int value = progressBar.Value; 
            while (value< progressBar.Maximum) 
            { 
                //如果是跨線程調用 
                if (InvokeRequired) 
                { 
                    this.Invoke(new SetProgressBarValue(SetProgressValue), value++); 
                } 
                else
                { 
                    progressBar.Value = ++value; 
                } 
            } 
        }  


        public ThreadForm() 
        { 
            InitializeComponent(); 
        }  
   
        private void btnInvoke_Click(object sender, EventArgs e) 
        { 
            progressBar.Value = 0; 
            Thread thread = new Thread(new ThreadStart(RunWithInvoke)); 
            thread.Start(); 
        }  

     } 
}

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved