在.NET中向事件发送信号的最简单方法

fei*_*ief 6 .net c# events

我希望有一种简单的方法可以将事件发送到几个不涉及我编写自定义套接字侦听器的进程.我正在尝试通知几个需要更新已发生配置更改的缓存配置设置的应用程序.我想实现一个"主机范围"单例,但未能找到任何示例.这样的事情甚至可能吗?

Spe*_*uch 5

您可以使用跨进程等待句柄.查看这个优秀的线程教程以获取更多信息.

您可以使用单例类中的等待句柄来创建一种主机范围的单例.以下是您需要了解的有关C#中单例模式的所有信息.

一种可能的实现:单例可以表示配置设置.在检索设置之前,您可以检查存储缓存配置设置的文件的时间戳.可以通过等待句柄保护对文件的读/写访问权限.

如果您反对使用等待句柄,则可以在注册表中设置时间戳.获取和设置注册表值是原子操作,因此它们是自动线程安全的.但请注意,这需要注册表权限,因此除非您确定您的用户具有必需的权限,否则它可能是不受欢迎的.


Jim*_*hel 5

您可以使用命名的 EventWaitHandle。但是,在通知所有正在侦听的进程之后,您还需要某种方法来重置事件。您可能可以执行一些操作,例如设置事件,然后在一小段时间后重置它:一秒或五秒。客户可以知道该事件不会连续快速触发。

另一种可能性是使用命名的信号量。但是您需要知道有多少侦听器,以便您可以设置信号量的初始值和最大值。

有很多方法可以完成您的要求,而无需构建任何花哨的东西。


小智 4

命名信号量命名互斥体用于进程间同步。

MSDN说:

信号量有两种类型:本地信号量和命名系统信号量。如果使用接受名称的构造函数创建 Semaphore 对象,则它会与该名称的操作系统信号量相关联。命名系统信号量在整个操作系统中都是可见的,并且可用于同步进程的活动。

MSDN说:

命名系统互斥体在整个操作系统中都是可见的,并且可用于同步进程的活动。您可以使用接受名称的构造函数来创建表示命名系统互斥体的 Mutex 对象。操作系统对象可以同时创建,也可以在互斥对象创建之前就存在。

希望这可以帮助