2009-12-23 101 views
1

我开发了Windows服务来处理记录将存储在数据库中的文件。当Windows服务找到一个文件时,它会创建一个线程并将每个文件分配给一个线程。我没有使用线程池。我想知道Windows服务何时停止,然后如何确定有多少线程正在运行以及它们是否完成。如果所有线程都被执行,那么windows服务可以成功停止。其他的Windows服务应等到所有线程执行或中止。如何实现这一点。Windows服务和线程编程.NET

回答

1

您始终可以将Thread对象存储在列表中并从中进行管理。

喜欢的东西:

List<Thread> workerThreads = new Lits<Thread>(); 
Tread workerThread = new Thread(...); 
workerThreads.Add(workerTread); 
workerThreads.Start(); 
1

你需要保持运行的线程的列表。您可以通过将每个新线程添加到列表(在调用开始之前),并让worker方法从列表中删除线程(直接或通过在控制器对象上引发事件)来实现此目的。

基本上你需要自己照顾这个。

希望这有助于

1

当Windows服务停止?

当使用SCM关闭,你可以检查调用OnStop事件追踪关闭事件

如何确定有多少线程正在运行以及它们是否齐全? 只需将您创建的每个线程都保存在一个数组或列表中,并检查线程是否仍然运行,您可以在线程函数的末尾设置布尔变量。

要在特定条件下关闭服务,可以使用Environment.Exit方法。

+0

您不需要添加布尔值。只需检查线程的状态。它已经说过,如果线程停止或不。 – 2009-12-23 12:18:21

+1

我知道你可以检查ThreadState属性,但如果你依赖它的话会导致很多问题;检查这个http://stackoverflow.com/questions/1010030/what-value-is-the-threadstate-property – 2009-12-23 13:07:24