我正在创建一个Windows服务应用程序,我希望在系统错误,odbc连接或丢失文件错误时以编程方式暂停。我想知道是否有人知道该怎么做? Windows服务应用程序使用odbc连接和datareader连接到MS Access数据库和Oracle表,因此我可能会遇到可能的错误,我只想让用户暂停处理错误,如果/当它们发生时。
答案 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倍,无论你希望它能在几秒钟内完成睡眠。