gpt4 book ai didi

c# - EventWaitHandle 未在进程终止时关闭

转载 作者:行者123 更新时间:2023-11-30 17:11:51 25 4
gpt4 key购买 nike

我有一个 C# 程序可以像这样打开一个 EventWaitHandle 以被 Windows 服务触发。

EventWaitHandle sampleEventHandle = new EventWaitHandle(false, EventResetMode.AutoReset, "Global\\sampleEvent");

当程序现在被终止(或由于意外错误而终止)时,EventWaitHandle 没有被关闭,并且在重新启动程序时发生以下错误:

System.UnauthorizedAccessException: Access to the path is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.Threading.EventWaitHandle..ctor(Boolean initialState, EventResetMode mode, String name)

一分钟后,EventWaitHandle 关闭,您可以重新启动应用程序。

关于如何解决这个问题有什么想法吗?

最佳答案

发生这种情况是因为服务在同一个对象上打开了一个句柄。这是意料之中的,毕竟您正在使用它来实现服务和您的程序之间的信号传输。在最后一个句柄关闭之前,物理底层 Windows 命名对象不会从全局命名空间中删除。

所以在这方面获得异常会给你一个真正的问题诊断,该服务使用了错误的句柄并且当你重新启动你的程序时永远无法与你通信。一分钟后如何解决这个问题很难猜测,我必须假设该服务定期调用 OpenExisting()。

解决方案很简单:它应该是创建等待句柄的服务,您的 UI 程序应该调用 OpenExisting()。该事件现在始终存在,至少只要服务处于事件状态。如果没有,则 OpenExisting() 会通过 WaitHandleCannotBeOpenedException 为您提供出色的诊断

关于c# - EventWaitHandle 未在进程终止时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11146729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com