gpt4 book ai didi

c# - 在另一个方法中调用 ServiceController.WaitForStatus 立即返回

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:32 26 4
gpt4 key购买 nike

我正在编写一个应用程序,以使用 ServiceController 以编程方式启动/停止 Windows 服务。我有一个包含一些 UI 功能的 UI 类,以及一个启动和停止服务的 Helper 类。

在 Helper 类中:

void StopService()
{
var controller = new ServiceController("MyService");

if (controller.Status == ServiceControllerStatus.Running)
{
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 60));
}
}

在 UI 类中:

Helper.StopService();

var controller = new ServiceController("MyService");

if (controller.Status == ServiceControllerStatus.Stopped)
{
// Do some stuff
}
else
{
// MyService not stopped. Explode!
}

问题是当服务停止时,Helper 中的方法立即返回给 UI 类中的调用者,而不是等待服务到达停止(服务最终在大约 5-10 秒后停止)。如果我将启动/停止逻辑移至 UI 类,一切就会恢复正常。

我在这里犯了什么愚蠢的错误?

最佳答案

而不是 ServiceController.WaitForStatus()您可以使用延迟/刷新循环,如 MSDN 中所示 ServiceController Class但更好的方法可能是使用异步等待状态,如 this answer 中详述的那样.

sc.Stop();
while (sc.Status != ServiceControllerStatus.Stopped)
{
Thread.Sleep(1000);
sc.Refresh();
}

关于c# - 在另一个方法中调用 ServiceController.WaitForStatus 立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996720/

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