我有一个Sender
类发送Message
上IChannel
:如何等待C#事件被提出?
public class MessageEventArgs : EventArgs {
public Message Message { get; private set; }
public MessageEventArgs(Message m) { Message = m; }
}
public interface IChannel {
public event EventHandler<MessageEventArgs> MessageReceived;
void Send(Message m);
}
public class Sender {
public const int MaxWaitInMs = 5000;
private IChannel _c = ...;
public Message Send(Message m) {
_c.Send(m);
// wait for MaxWaitInMs to get an event from _c.MessageReceived
// return the message or null if no message was received in response
}
}
当我们发送信息,IChannel
有时会响应这取决于什么样的Message
是通过提高MessageReceived
事件发送。事件参数包含感兴趣的消息。
我想Sender.Send()
方法来等待一小段时间,看看是否引发此事件。如果是这样,我将返回其MessageEventArgs.Message
财产。如果不是,我会返回一个空值Message
。
我该如何等待这种方式?我宁愿不要使用ManualResetEvents
等线程,因此坚持常规的event
对我来说是最合适的。
”。 ..不希望做线程legwork ...“ - 这应该解释为你的应用程序完全在一个线程内运行? – 2010-05-12 16:42:30
不,使用工作线程并且很好,它们在应用程序中的其他地方使用(例如,IChannel实现会产生一个新线程来写入流)。尽管如此,我仍想继续使用委托和事件的语法糖,而不是使用较低级别的System.Threading。 – 2010-05-12 16:44:19
代表和事件不是线程的语法糖。事件在同一线程中引发并处理(它是函数调用中的语法糖,其工作方式相同) – 2010-05-12 16:47:13