-1

我用 C# 编写了一个小程序,它将被集成到巡航控制中(编辑:哎呀,按回车太早了),它在它们自己的单独线程中创建了某些(而不是预定义的)JVM。但是,当终止线程时,JVM 仍然存在并且没有被卸载。此功能适用于 .bat 文件,但如果它们调用 JVM,它仍然保持打开状态!

每个线程都是从此类的实例创建并调用 Run()

_Critical 被主进程用于测试原因。

class BatThread
{
    private string _args, _fileName;
    private bool _critical;
    public ManualResetEvent Flag;

    public BatThread(string fileName, string args, bool critical)
    {
        _fileName = fileName;
        _args = args;
        _critical = critical;
        Flag = new ManualResetEvent(false);
    }
    public void Run()
    {
        using (Process Proc = new Process())
        {
            Proc.StartInfo.FileName = _fileName;
            Proc.StartInfo.Arguments = _args;
            Proc.StartInfo.RedirectStandardError = false;
            Proc.StartInfo.RedirectStandardInput = false;
            Proc.StartInfo.RedirectStandardOutput = false;
            Proc.StartInfo.UseShellExecute = true;
            Proc.Start();

            while (true)
            {
                if (Proc.WaitForExit(100))
                {
                    break;
                }
                else if (this.Flag.WaitOne(100))
                {
                    Proc.Kill();
                    break;
                }
                Thread.Sleep(5000);
            }
            this.Flag.Set();
        }
    }

    public bool critical { get { return _critical; } }

}
4

1 回答 1

1

它不起作用,因为终止线程不会自动终止您生成的进程(独立)。一般来说,杀死一个线程是不好的做法。您应该发出信号退出线程,以便它可以进行清理(拆除进程),然后干净地返回。

于 2013-01-23T11:30:33.693 回答