我在C#中编写了一个小程序,它将被集成到巡航控制中(编辑:oops,太早按下输入),在他们自己的单独线程中创建某些(而非预定义的)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; } }
}
答案 0 :(得分:1)
它不起作用,因为杀死线程不会自动杀死您生成的进程(独立)。 一般来说,杀死一个线程是不好的做法。你应该通知线程退出,这样它就可以进行清理(将进程拆除),并且干净地返回。