我有一个Stream对象偶尔会获得一些数据,但是间隔时间不可预测.流上出现的消息是明确定义的,并提前声明其有效负载的大小(大小是每个消息的前两个字节中包含的16位整数).
我想要一个StreamWatcher类来检测Stream何时有一些数据.一旦它发生,我想要引发一个事件,以便订阅的StreamProcessor实例可以处理新消息.
这可以用C#事件完成而不直接使用Threads吗?看起来它应该是直截了当的,但我无法完全理解设计这个问题的正确方法.
我有很多代码,如下所示,我明确地实现了接口所需的一些事件.
public class IMicrowaveNotifier {
event EventHandler<EventArgs> DoorClosed;
event EventHandler<EventArgs> LightbulbOn;
// ...
}
public class Microwave : IMicrowaveNotifier {
private EventHandler<EventArgs> _doorClosed;
event EventHandler<EventArgs> IMicrowaveNotifier.DoorClosed {
add { lock (this) _doorClosed += value; }
remove { lock (this) _doorClosed -= value; }
}
private EventHandler<EventArgs> _lightbulbOn;
event EventHandler<EventArgs> IMicrowaveNotifier.LightbulbOn {
add { lock (this) _lightbulbOn += value; }
remove { lock (this) _lightbulbOn -= value; }
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
你可以看到很多这是样板.在Ruby中,我可以做这样的事情:
class Microwave
has_events :door_closed, :lightbulb_on, ...
end
Run Code Online (Sandbox Code Playgroud)
在C#中有没有类似的更短的方法来删除这个样板? …