我在用 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)
取决于上下文。