当客户端连接到事件(将自身添加到事件中)时调用客户端事件处理程序/侦听器

本文关键字:事件 客户端 调用 事件处理 侦听器 程序 连接 添加 | 更新日期: 2023-09-27 18:16:59

是否有一种简单/干净/优雅的方式在事件客户端连接到事件时调用它?也就是说,当客户端使用+=连接到事件时,例如:

someEvent += someClient

如果客户端可以"立即"调用,就像事件发生在客户端连接时一样,这将是有用的。目的是向客户端提供最近发生的事件的信息,以便客户端可以"赶上"与事件相关联的状态。

举一个具体的例子:一家商店的窗户上有一些自动收报机式的标志。每个标识的代码都从商店的系统中获得一个事件,告诉它要显示什么(例如,目前有什么特价商品)。(每个标志都显示同样的东西。)当每个标识被打开时,它想知道最新的"打折"活动是什么。如果商店经营者首先将销售信息输入到商店系统中(并且'on sale'事件发送出去-没有人),然后打开标志,则标志必须以某种方式询问最新事件的'on sale'信息。当它作为事件客户端/接收器连接时,将最新的事件(重新)发送到符号,从而在符号中只有一种机制,这似乎更干净。

是否有一种方法将"客户端已注册"的钩子连接到事件,以便执行"自定义代码"?在这种情况下,代码将向(仅)新客户端发送事件,以便客户端"赶上"。例如,覆盖用于注册客户端的+=操作符?(我不清楚该怎么做……)

谢谢你的建议

当客户端连接到事件(将自身添加到事件中)时调用客户端事件处理程序/侦听器

试试这个:

class Test
{
    public delegate void TestEventHandler(int arg);
    private TestEventHandler _testEvent;
    private readonly _defaultEventArg = 42;
    public event TestEventHandler TestEvent
    {
        add
        {
            _testEvent += value;
            value(_defaultEventArg);
        }
        remove
        {
            _testEvent -= value;
        }
    }
}

var t = new Test();
t.TestEvent += (val) =>
{
    Console.WriteLine("Event fired: " + val);
};

您必须实现自定义事件访问器。

从MSDN上看一下这个HowTo

我复制了代码片段并插入了注释,您可以在其中插入代码以调用新添加的侦听器:

event EventHandler IDrawingObject.OnDraw
    {
        add
        {
            lock (PreDrawEvent)
            {
                // Write your custom code here
                PreDrawEvent += value;
            }
        }
        remove
        {
            lock (PreDrawEvent)
            {
                PreDrawEvent -= value;
            }
        }
    }