委托部分不在MMO的客户端运行

时间:2015-04-22 18:59:20

标签: c# delegates

这里的代码大部分没什么问题,但它似乎没有运行委托部分。我标记了它没有使用评论的地方:

using UnityEngine;
using System.Collections;
using ogclient_framework;

[PacketOpcode(1)]
public class Packet_01_Login : Packet  {


    public override void Decode()

    {
        bool success = ByteBuffer.ReadBoolean ();
        if (success) 
        {
            int networkId = ByteBuffer.ReadInt();
            Debug.Log ("Successful login, network ID:" + networkId);

        }
        else
        {

            Debug.Log ("Not correct/server down");

            int opcode = ByteBuffer.ReadInt();

            Debug.Log ("test");
            //BELOW THIS SECTION DOES NOT RUN, BUT NO ERRORS SHOWN, THE DEBUG LOG 'TEST1' IS NOT PRINTED BUT THE DEBUG LOG ABOVE IS.
            GameClient.Singleton.Prepare(delegate{
                InterfaceManager.Singleton.loginMessage(opcode);
                Debug.Log ("test1");

            });

        }
    }
}

为什么不起作用?我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:1)

  

这里的代码大部分没什么问题,但它似乎没有运行   代表部分。

那是因为此代码执行委托。

此代码将代理传递给GameClient.Singleton.Prepare,但是 是否以及 执行代理时最多为GameClient.Singleton.Prepare

请考虑以下代码:

    private delegate void MyDelegate();

    private void button1_Click(object sender, EventArgs e)
    {
        prepare(delegate
        {
            Debug.WriteLine("test1");
        });
    }

    private void prepare(MyDelegate d)
    {
        Debug.WriteLine("Prepare");

        //Maybe invoke the delegate, maybe not yet
        //     d.Invoke();
    }

当button1_Click触发时,您只会在调试跟踪中看到“Prepare” - 而不是“test1”,除非您取消注释Invoke语句。