帮助解释与代表的代码

时间:2011-05-26 09:53:12

标签: c# delegates

我是C#的新手,我玩的框架和我试图弄清楚一些代码是如何工作的(代码没有任何问题)。它是一个客户端/服务器应用程序,它将一些文本从客户端发送到服务器,然后在文本框中接收并显示相同的字符串。 以下代码来自客户端及其表单。此处仅包含用于从服务器接收字符串的内容。我在框架中加入了一些评论。

public class TestModuleMobile : PreCom.Core.ModuleBase, PreCom.Core.IForm
{
    public delegate void ReceiveDelegate(string data);
    public event ReceiveDelegate DataReceived;

    public void Receive(byte[] data)
    {
        string text = Encoding.UTF8.GetString(data, 0, data.Length);

        if (DataReceived != null)
            DataReceived.Invoke(text);
    }

    public override bool Initialize()
    {
        PreCom.Application.Instance.Communication.Register(99, Receive);         
    // Register(uint receiverID, RecieveDelegate receiver): Called by modules to register for communication.
    //
    //      Parameters: 
    //          receiverID:
    //              Module Id
    //          receiver:
    //              The module receive function that will be called by the framework when data
    //              arrives to specific module. (This method should return as soon as possible
    //              to avoid timeouts)
        _isInitialized = true;
        return true;
    }
}

public partial class TestModuleMobileForm : PreCom.Controls.PreComForm
{
    TestModuleMobile _module;

    public TestModuleMobileForm(TestModuleMobile module)
    {
        _module = module;
        _module.DataReceived += new TestModuleMobile.ReceiveDelegate(DataReceived);
        InitializeComponent();
    }

    void DataReceived(string data)
    {
        if (InvokeRequired)
        {
            ThreadStart myMethod = delegate { DataReceived(data); };
            this.BeginInvoke(myMethod);
            return;
        }  
        listBox1.Items.Insert(0, data);
        this.preComInput21.Text = "";
    }
}

问题:
 1. public override bool Initialize()
对Register的函数调用将ReceiveDelegate对象作为第二个参数。那么当它只是一个函数时,如何向它发送一个函数(Receive)呢?这是如何运作的?

 2. public void Receive(byte [] data)
在if案件中会发生什么?如何调用工作?

 3. void DataReceived(字符串数据)
if-case(逐行)会发生什么?

2 个答案:

答案 0 :(得分:1)

Stackoverflow上有很多相关的帖子,您可以浏览这些帖子以更好地了解代理。阅读完它们之后,请仔细阅读您的代码,您会发现它更容易理解。

提示:请在此网页的右侧查看所有相关帖子。

答案 1 :(得分:1)

您需要完全了解代表,以便您最好按顺序阅读这些内容:

  1. Delegates (C# Programming Guide)
  2. Delegates Tutorial
  3. Delegates and Events in C# / .NET