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