gpt4 book ai didi

c# - Windows 服务应用程序安装

转载 作者:太空宇宙 更新时间:2023-11-03 11:15:12 25 4
gpt4 key购买 nike

我是 .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() 在您使用的上下文中,它只是告诉服务在同一应用程序上下文中再次运行。作为 Windows 服务的一部分,应用程序上下文已经存在于 ServiceBase 的上下文中。因为它是一项服务,所以它不会停止,直到通过需要它的方法、未处理的异常或外部命令给出停止指令。

如果您担心在线程正在执行时防止停止发生,您将需要某种全局锁来指示进程正在工作。它可能就像提升 SmartThreadPool 的范围一样简单:

private SmartThreadPool _pool = null;
private SmartThreadPool Pool
{
get
{
if (_pool == null)
_pool = new SmartThreadPool();
return _pool;
}
}

protected override void OnStop()
{
if (Pool != null)
{
// Forces all threads to finish and
// achieve an idle state before
// shutting down
Pool.WaitForIdle();
Pool.Shutdown();
}
}

关于c# - Windows 服务应用程序安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com