WaitForStatus 将应用程序标记为 "Not Responding"

WaitForStatus marks application as "Not Responding"

我有一个简单的应用程序,带有隐藏表单并且不在任务栏上显示(表单设置),只有一个目的 - 在服务为 运行 时显示托盘图标。

服务也是我自己实现的,使用双工回调方式向这个应用发送消息。当它即将停止时,它会向应用程序发送消息,因此它会隐藏托盘图标。问题是,当服务再次启动时,我需要显示图标。现在,我正在使用 WaitForService 执行此操作,没有超时。

if (sc.Status != ServiceControllerStatus.Running)
    sc.WaitForStatus(ServiceControllerStatus.Running);
_notifyIcon.Visible = true;

这工作正常 - 代码暂停执行,直到服务再次启动。

但是有一个问题 - 如果应用程序等待一段时间,它会被标记为 "Not responding",它会出现在任务栏中,并且会出现某种小的 window。那么,有没有其他方法可以避免这种情况? WaitForStatus 的一些解决方法,或用于监视服务状态的不同方法。

似乎 ServiceController.WaitForStatus 阻塞了 UI 线程。

为了避免这种情况,您有 multiple choices。我会试试这个

Thread t = new Thread(() =>
{
    sc.WaitForStatus(ServiceControllerStatus.Running);
    // Add something to do after the status updates
});
t.Start();

但请记住,您必须使用 Form.Invoke 在另一个线程中与应用程序 UI 交互。

this.Invoke(new Action(() => 
{
    _notifyIcon.Visible = true;
}));