我有一个WinForm应用程序和一个服务,该服务在服务器上从应用程序执行某些工作。我希望用户能够从应用程序控制服务,因此我添加了一个ServiceController来完成所有工作(一开始只是启动、停止、重新启动)。到目前为止一切都很好,但在测试不同的场景时,我遇到了一个问题:我的服务正在服务器上运行,应用程序正在同一网络中的客户端上运行。我连接到服务并打开ServiceController。
在我的情况下,该方法似乎会尝试停止服务约90秒钟,然后抛出InvalidOperationException异常,我可以处理它,但我不希望用户等待90秒。 我想我的问题基本上是:当计时器(在这种情况下为30秒)耗尽时会发生什么? 代码不应该继续运行吗? 这个函数何时会抛出TimeoutException? MSDN说“超时参数指定的值过期时。”-但似乎这并不意味着在值达到零之后。 能有人给我解释一下吗?
然后我关闭了运行服务的服务器(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说“超时参数指定的值过期时。”-但似乎这并不意味着在值达到零之后。 能有人给我解释一下吗?