3
我有一个对象,在启动时从服务器请求一些信息。它发送一个标识符与消息,这将是相同的答复,所以它可以肯定它是响应正确的消息。目前,代码看起来大致如此。将一个额外的参数传递给一个委托
void GetInitialData()
{
string guid = Guid.NewGuid().ToString();
Communicator.NewMessage += (sender, e)
{
if(e.Message.Id == guid)
FillInfo();
};
Communicator.SendMessage(new Message(stuff, guid));
}
这工作,但由于该数据只需要一次,我想从事后的事件,你不能用拉姆达做退订。如果我使用单独的函数,这允许我取消订阅,但似乎将参数传递给函数的唯一方法是通过类变量。
string guid;
void GetInitialData()
{
Communicator.NewMessage += MessageReceived;
Communicator.SendMessage(new Message(stuff, guid));
}
void MessageReceived(object sender, MessageArgs e)
{
if(e.Message.Id == guid)
{
FillInfo();
Communicator.NewMessage -= MessageReceived;
}
}
有没有办法解决这个问题,可以让我取消订阅,还可以避免让额外的变量混乱起来?
即便如此,我看不到任何好处。因为在某些情况下,某些机构必须在这种情况下保存数据e。因为它的一些信息,那么它必须是某种类型的。因此MessageArgs类型。你为什么要避免它?如果是这样,你还想知道什么类型的事件已经产生? – Zenwalker 2012-01-05 07:54:22