我已經在C#中編寫了一個小程序,它將集成到巡航控件中(編輯:oops,按回車鍵太早),創建特定的(並且不是預定義的)JVM在他們自己的獨立線程中。但是,在殺死線程時,JVM仍然存在並且未被卸載。該功能可以正確處理.bat文件 - 但是如果它們調用JVM,它仍然保持打開狀態!當線程死掉時,包含JVM的線程不會終止JVM
每個線程從這個類的一個實例創建並調用運行()
_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; } }
}
關閉爲什麼?問題在於爲什麼進程在創建它們的線程關閉之後仍然存在......以及如何解決這個問題。 – Izzy