这里的代码大部分没什么问题,但它似乎没有运行委托部分。我标记了它没有使用评论的地方:
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");
});
}
}
}
为什么不起作用?我该怎么做才能解决它?
答案 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
语句。