【发布时间】:2012-10-11 16:30:10
【问题描述】:
我是 .NET 的初学者。
我有一个关于运行多线程的 Windows 服务应用程序的问题。我的问题是,当我尝试将我的应用程序注册到 Windows 服务中时,我在服务窗口中的“正在启动”中看到了我的服务状态。我已经包含了几行代码来显示我正在尝试做的事情。
protected override void OnStart(string [] args) {
timer = Timer(5000);
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Start();
// when I commented out Application.Run() it runs perfect.
Application.Run(); // run until all the threads finished working
//todo
}
private void OnElapsedTime(object s, ElapsedEventArgs e) {
SmartThreadPool smartThreadPool = new SmartThreadPool();
while( i < numOfRecords){
smartThreadPool.QueueWorkItem(DoWork);
//.....
}
}
如果您需要更多信息,请告诉我。
【问题讨论】:
-
您认为
Application.Run()在您提供的上下文中会做什么? -
感谢您查看我的代码。对不起,我忘了把循环放在 smartThreadPool.QueueWorkItem(DoWork) 之前。但是我试图在主程序退出之前等待所有正在运行的线程。我希望你明白我想要做什么。让我给你改一下代码。
-
要让服务显示“已启动”,必须允许 OnStart 完成。以后状态更改还有其他入口点(OnStop 等)。
标签: c# multithreading windows-services