如何杀死从C#中的线程(由线程池创建)启动的进程?

RKP*_*RKP 0 c# multithreading

我编写了一个Windows服务,它监视数据库表中的待处理作业并生成线程来运行这些作业,然后每个线程依次启动一个进程来完成实际工作(该过程是一个Microsoft实用程序,而不是自定义程序) .这很好,但是如果其中一个工作的时间比平时长,我想杀掉那份工作.

如何才能做到这一点?我需要中止线程还是杀死线程启动的进程?我还需要在文本文件中保存该进程的标准输出.我使用以下代码来做到这一点.

using (Process process = Process.Start(startInfo))
{
    LogToTextFile(process.StandardOutput.ReadToEnd());
    process.WaitForExit();
    exitCode = process.ExitCode;
}
Run Code Online (Sandbox Code Playgroud)

线程是否有可能检查同一个表中的一个标志并终止正在运行的进程,这样它就不需要中止了?我ThreadPool.QueueUserWorkItem用来创建一个线程.在不停止Windows服务的情况下停止这些正在运行的进程的最可靠方法是什么?

Ada*_*son 6

Process.Kill是你在找什么.杀死线程是不明智的,并且对它启动的进程没有任何影响.

假设您要等待60秒才能完成该过程,您可以使用:

using (Process process = Process.Start(startInfo))
{
    LogToTextFile(process.StandardOutput.ReadToEnd());

    if(process.WaitForExit(60000))
    {
        exitCode = process.ExitCode;
    }
    else
    {
        process.Kill();
    }
}
Run Code Online (Sandbox Code Playgroud)

为了加倍清楚,不要杀死ThreadPool线程.