我在用 C# 实现事件架构时遇到了一些问题。基本布局是这样的:
我们有一个与服务器通信的网络层(dll)。该层为数据库内的更改事件创建了几个接口。数据库字段发生更改,dll 调用我对相应接口的实现。我有一个 GUI,在它的主要方法中有一个数据对象,它存储我显示的临时数据列表,直到我的用户更改某些内容,在这种情况下,我会将更改发送到数据库。
现在的问题是我无法在网络层或我的接口实现中实现事件处理程序,因为我的数据对象(应该获取事件的结果)只存在于我的 GUI 中,而且它是main 方法,因此对于适当的对象来说是未知的。
我将以伪代码为例:
命名空间客户端连接 { 公共类 DataListener : IDataListener { 公共委托无效的SomethingReceivedHandler(对象发送者,SomethingData数据包); 公共事件 SomethingReceivedHandler somethingRecievedHandler; 公共无效的SomethingReceived(SomethingData数据包) { 如果(SomethingRecievedHandler != null) { SomethingRecievedHandler(this, packet); } }
是我当前的接口实现。该层类似于:
private void ProcessPacket(SomethingData 数据包) { 如果(数据包 == 空) 返回; 尝试 { 如果(数据包是SomethingData) DataListener.SomethingReceived(packet as SomethingData); //剪辑
我的主要方法是:
公共部分类 Main : FormMain { 数据客户端数据;//包含GUI中的所有临时数据 公共 frmMain() { 客户端数据 = 新数据(); 数据监听器 dataListener = newDataListener(); 初始化组件(); }
如果事件触发,我想做类似的事情:
ClientData.SomeList.Add(packet)
取决于上下文。