我有一个具有GUI的应用程序,您可以在其中进行一些设置。其中一个设置是设置从各种源收集数据的时间。执行实际工作的Windows服务现在正在运行一个休眠的线程,直到设置的时间发生。
问题
我的问题是,一旦我的服务正在休眠,有人决定改变数据收集的时间,那么通知服务更改时间的最佳方法是什么?
是否可以从我的GUI部分告诉Windows重新启动我的特定服务?或者我可以发送线程中断吗?你会怎么做?
答案 0 :(得分:1)
如果您运行的帐户具有正确的权限,您的GUI当然可以控制该服务。
您可以使用ServiceController
类:
ServiceController sc = new ServiceController("Simple Service");
if (sc.Status == ServiceControllerStatus.Stopped)
{
sc.Start();
while (sc.Status == ServiceControllerStatus.Stopped)
{
Thread.Sleep(1000);
sc.Refresh();
}
}
假设设置存储在文件中,另一个选项是使用FileSystemWatcher
类来监视文件的更改 - 这将允许您查看值是否已更改并在服务中重置它们。