小编Dam*_*ire的帖子

从流中不断读取?

我有一个Stream对象偶尔会获得一些数据,但是间隔时间不可预测.流上出现的消息是明确定义的,并提前声明其有效负载的大小(大小是每个消息的前两个字节中包含的16位整数).

我想要一个StreamWatcher类来检测Stream何时有一些数据.一旦它发生,我想要引发一个事件,以便订阅的StreamProcessor实例可以处理新消息.

这可以用C#事件完成而不直接使用Threads吗?看起来它应该是直截了当的,但我无法完全理解设计这个问题的正确方法.

c# streaming events asynchronous

14
推荐指数
2
解决办法
1万
查看次数

在显式实现接口时,是否有更好的方法在C#中编写这个重复的事件声明代码?

我有很多代码,如下所示,我明确地实现了接口所需的一些事件.

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#中有没有类似的更短的方法来删除这个样板? …

c# events refactoring boilerplate

2
推荐指数
1
解决办法
233
查看次数

标签 统计

c# ×2

events ×2

asynchronous ×1

boilerplate ×1

refactoring ×1

streaming ×1