委託就是一個函數聲明,但沒有函數體,可以使它引用不同的函數來實現不同的目的,將真正的事情交給其它人處理。
最簡單的方式見下:
例1:
private void button3_Click(object sender, EventArgs e)
{
Set set_deg = new Set(set2);
set_deg(80);
}
public void set2(int value)
{
progressBar1.Value = value;
}
例2:
public delegate string rename(string name);
public string get_rename(rename rename,string name)
{
return "final name:" + rename(name);
}
public string test(string name)
{
return "rename:"+name;
}
private void button7_Click(object sender, EventArgs e)
{
rename rename=new rename(test);
string final_name = get_rename(rename, "劉洪方");
MessageBox.Show(final_name);
}
當在使用多線程場景時,需要使用invoke來讓控制所在窗口的線程調用委託,實現方式見下:
public void set(int value)
{
progressBar1.Value = value;
}
private void button2_Click(object sender, EventArgs e)
{
ThreadStart ts = new ThreadStart(run);
Thread thread = new Thread(ts);
thread.Start();
}
public void run()
{
for (int i = 1; i <= 100; i++)
{
Thread.Sleep(100);
if (this.InvokeRequired)
{
Set set_deg = new Set(set);
this.Invoke(set_deg, new object[] { i });
}
else
{
set(i);
}
}
}