【发布时间】:2015-06-01 11:57:11
【问题描述】:
我创建了一个窗口服务,当它检测到我的数据库有变化时它会停止。
问题:如何通过 C# 编码在 5 或 10 秒后停止窗口服务后再次启动?
private static string connectString = ConfigurationManager.ConnectionStrings['ConnStr'].ToString();
int sql_depend = 0;//stop
private delegate void GridDelegate(DataTable table);
private SqlDependency dep;
public Watcher()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
SqlDependency.Start(connectString);
sql_depend = 1;
UpdateGrid();
string file = @"E:\WatcherLogFile\sds.txt";
TextWriter writer = new StreamWriter(file, true);
writer.WriteLine("Window services started");
writer.Close();
}
protected override void OnStop()
{
string file = @"E:\WatcherLogFile\sds.txt";
TextWriter writer = new StreamWriter(file, true);
writer.WriteLine("Window services stopped");
writer.Close();
}
//sql dependency check
private void UpdateGrid()
{
string sql = "select [Name], [ClientName] from [Account]";
DataTable dt = new DataTable();
using (SqlConnection cn = new SqlConnection(connectString))
{
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cn.Open();
dep = new SqlDependency(cmd);
dep.OnChange += new OnChangeEventHandler(dep_OnChange);
using (SqlDataReader rdr = cmd.ExecuteReader())
{
dt.Load(rdr);
}
}
}
}
//sql dependency detect changes
void dep_OnChange(object sender, SqlNotificationEventArgs e)
{
ServiceController myService = new ServiceController();
myService.ServiceName = "Watcher";
myService.Stop();
SqlDependency.Stop(connectString);
sql_depend = 0;
}
- 可以是 onStop() 中的循环函数吗?我希望它每天手动启动一次,然后自动启动/停止。
【问题讨论】:
-
你为什么要阻止它?为什么不简单地让它暂停它正在做的事情呢?您不能从自身内部重新启动服务器,当它停止时,没有代码正在执行。
-
我是新手,也许我的逻辑是错误的,嗯,如何暂停并重新开始?可以循环吗?
-
好吧,问题是,你还在等什么?你在等什么?
-
我的窗口服务用于检测我在数据库中的一张表上的任何更改。一旦它检测到变化,它就会停止,然后提醒我,然后我需要它重新启动以再次运行该过程。
-
它如何提醒您?再说一遍,它还在等什么?是否在等待您确认警报?我知道现在它“等待”您启动服务。你想要它等待什么?您可以描述您想要的流程,而不是您拥有的流程?
标签: c#