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

时间:2014-08-06 15:47:17

标签: c# events hook

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

someEvent += someClient

如果可以立即调用客户端将会很有用。 - 好像事件是在客户端连接时发生的。目的是向客户提供最近发生的事件中的信息,以便客户能够赶上'与该事件相关的国家。

一个具体的例子:商店的窗户上有一些自动收报机带式标志。每个代码的代码都会从商店的系统中获取一个事件,告诉它要显示什么(例如,此刻的销售情况)。 (每个标志显示相同的内容。)当每个标志打开时,它想知道最新的'在售后'事件是。如果商店经营者首先将销售信息输入商店系统(并且'销售'活动熄灭 - 无人),然后打开标志,标志必须以某种方式询问最新活动&# 39; s'出售'信息。当它作为事件客户端/接收者连接时,将最新事件(重新)发送到符号似乎更清晰,因此在符号中只有一个机制。

有没有办法连接一个'客户已注册'挂钩事件,以便自定义代码'会被处决吗?在这种情况下,代码会向(仅)新客户端发送一个事件,以便客户端得到“赶上”。例如,覆盖用于注册客户端的+ =运算符? (怎么这样做对我来说还不清楚......)

感谢您的想法。

2 个答案:

答案 0 :(得分:2)

试试这个:

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);
};

答案 1 :(得分:1)

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

从MSDN查看此HowTo

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

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