如何以编程方式在Windows服务应用程序中创建暂停?

时间:2011-05-05 19:37:41

标签: c# windows-services delay

我正在创建一个Windows服务应用程序,我希望在系统错误,odbc连接或丢失文件错误时以编程方式暂停。我想知道是否有人知道该怎么做? Windows服务应用程序使用odbc连接和datareader连接到MS Access数据库和Oracle表,因此我可能会遇到可能的错误,我只想让用户暂停处理错误,如果/当它们发生时。

3 个答案:

答案 0 :(得分:2)

ServiceController service = new ServiceController(serviceName);

TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutValue);

service.Pause(); //or whatever you want here.
sevice.WaitForStatus(ServiceControllerStatus.Paused, timeout);

...

然后重新启动,除

外做同样的事情
 service.Continue();
 sevice.WaitForStatus(ServiceControllerStatus.Running, timeout);

您可以针对您想要的任何州进行此操作。通过google搜索SeviceController查看msdn文档。这将是第一个返回的结果。

此外,您还需要处理服务中的OnPause和OnContinue事件。

答案 1 :(得分:0)

假设您的服务具有检查数据的连续循环,请将检查添加到外部源以获取暂停/继续命令。此源可以是消息队列,如MSMQ或数据库表。

通过让我的服务不断检查表中的命令,并在另一个表中报告其状态,我实现了类似的功能。当它获得一个启动命令时,它会在另一个线程上启动一个处理循环。 stop命令使它发出信号线程正常退出的信号。服务核心永远不会停止运行。

用户通过一个单独的应用程序与一个UI进行交互,该UI允许他们查看服务的状态并提交命令。由于应用程序通过数据库进行控制,因此不必在运行该服务的同一台机器上运行。

答案 2 :(得分:0)

你试过吗?

System.Threading.Thread.Sleep(1000); // sleep for 1 second

调整1000到1000倍,无论你希望它能在几秒钟内完成睡眠。