【问题标题】:Windows Service And Thread Programming .NETWindows 服务和线程编程 .NET
【发布时间】:2010-12-29 11:22:40
【问题描述】:

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

【问题讨论】:

    标签: .net .net-3.5 windows-services multithreading


    【解决方案1】:

    您始终可以将Thread 对象存储在列表中并从那里管理它们。

    类似:

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

    【讨论】:

      【解决方案2】:

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

      基本上你需要自己处理。

      希望对你有帮助

      【讨论】:

        【解决方案3】:

        windows服务什么时候停止?

        当使用单片机关闭时,可以查看 OnStop 事件来跟踪关闭事件

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

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

        【讨论】:

        • 您不需要添加布尔值。只需检查线程的状态。它已经说明线程是否停止。
        • 我知道你可以查看ThreadState属性,但是如果你依赖它会导致很多问题;检查这个stackoverflow.com/questions/1010030/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多