当客户端连接到事件(将自身添加到事件中)时调用客户端事件处理程序/侦听器
本文关键字:事件 客户端 调用 事件处理 侦听器 程序 连接 添加 | 更新日期: 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;
}
}
}