我眼中委托的真正面貌(二)
2009-05-07 08:26:49 来源:WEB开发网这段代码在第6段代码的基础上发生了小小的改动:为了说明问题方便我将委托的返回临行改为void,同时在DeleMathFuns类相应的方法中直接输出结果。比之第6段代码你能发现什么问题吗?没错,现在是多个方法挂接到同一个委托对象上了。在委托对象被调用时,挂接于委托对象之上的方法会按照多个方法挂接的先后顺序依次对其执行。这便是所谓的多路广播委托。
在这里我要强调一个问题,可用于多路广播委托的方法返回值必须是void型,这也是为什么我要在6的基础上对7的委托返回类型加以改动的原因。道理很简单,如果各个方法含有返回值,现在将其捆在一个委托对象之上,那么在调用时返回值要送给谁呢。呵呵……
我们从C#中为什么会引入委托开始探讨,到这里C#中委托的基本用法已经阐述完毕,下面,我们可以结合C#的一些高级论题对委托的功能进行一下更深层次的挖掘。
8.委托的跨线程操控
在此,我以人们常说的跨线程操控控件为例。首先,如果你已经掌握了C#多线程的基本用法,不妨自己试着实现一下这段程序。在未掌握委托之前,我曾经这样写过:
using System.Threading;
namespace MulTrdDelegate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//初始化子线程对象
private Thread demoThread = null;
private void button1_Click(object sender, EventArgs e)
{
demoThread = new Thread(new ThreadStart(ThreadProcUnsafe));
demoThread.Start();
}
public void ThreadProcUnsafe()
{
textBox1.Text = "这个控件的内容是由子线程实现的";
}
}
}
更多精彩
赞助商链接