【发布时间】:2011-02-12 11:02:20
【问题描述】:
我有以下 sn-p 代码(作为示例)查找联系人:
public string Search()
{
string address = "";
ContactManager manager = new ContactManager();
// LookupComplete is just a plain event
manager.LookupComplete += delegate
{
address = manager.Address;
};
manager.SearchFor("bob");
return address; // Address always appears to be populated
}
更新:
这是 ContactManager:
public class ContactManager
{
public string Address {get;set;}
public event LookupComplete;
public void SearchFor(string query)
{
SomeParser parser = new Parser();
parser.TokenParsed += new EventHandler<TokenParseEventArgs>(tokenParsed);
parser.Parse(query);
}
private void tokenParsed(object sender,TokenParseEventArgs e)
{
if (e.Message == "EOF")
{
Address = e.Message.Address;
if (LookupComplete != null)
LookupComplete(this,EventArgs.Empty);
}
}
}
Search 方法在触发该事件之前不会返回(我没有意识到这是匿名方法/委托的标准行为)。
但是,我很困惑为匿名委托生成的代码如何在完成时向Search 方法发出信号。
我已经尝试在 ContactManager.Address 属性中放置一个 Sleep(5000),因为我认为它可能来自 ContactManager 只是很快返回,但这没有什么区别。
谁能解释一下?
【问题讨论】:
标签: c# events anonymous-methods anonymous-delegates