gpt4 book ai didi

c# - .NET ServiceController.WaitForStatus 忽略超时

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

我有一个 WinForm 应用程序和一个服务,它在服务器上从该应用程序执行一些工作。我希望用户能够从应用程序控制服务,所以我添加了一个 ServiceController 来完成所有工作(仅开始、停止、重新启动)。到目前为止一切正常,但是在测试不同的场景时我遇到了一个问题:我的服务在服务器上运行,应用程序在同一网络中的客户端上运行。我连接到该服务并打开 ServiceController。

然后我关闭运行服务的服务器 (VM),并从客户端触发停止方法。我使用带有超时的 WaitForStatus 方法,问题是:应用程序似乎忽略了超时:

public void StopService()
{
if (this._serviceController.CanStop &&
(this.ServiceStatus == ServiceControllerStatus.Running || this.ServiceStatus == ServiceControllerStatus.Paused))
{
this._serviceController.Stop();
this._serviceController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30));
}

}

在我的例子中,这些方法似乎尝试停止服务大约 90 秒,然后抛出 InvalidOperationException,我可以处理,但我不希望用户等待 90 秒。我想我的问题基本上是:当计时器(在本例中为 30 秒)用完时会发生什么?代码不应该继续运行吗?这个函数什么时候抛出 TimeoutException? MSDN当“为超时参数指定的值过期”时说。 - 但这似乎并不意味着值达到零之后。

谁能教教我?

最佳答案

当我们指定 TimeSpan 时,WaitForStatus 会在等待给定时间后引发超时异常,但似乎是您在权限上有异常。

请阅读this answer .

关于c# - .NET ServiceController.WaitForStatus 忽略超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918621/

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