Saya memiliki kode berikut, tetapi mengapa ProcessExited
metode ini tidak pernah dipanggil? Ini sama jika saya tidak menggunakan shell Windows ( startInfo.UseShellExecute = false
).
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = path;
startInfo.Arguments = rawDataFileName;
startInfo.WorkingDirectory = Util.GetParentDirectory(path, 1);
try
{
Process correctionProcess = Process.Start(startInfo);
correctionProcess.Exited += new EventHandler(ProcessExited);
correctionProcess.WaitForExit();
status = true;
}
.....
internal void ProcessExited(object sender, System.EventArgs e)
{
//print out here
}
Close()
prosesnya! Saya mengalami masalah intermiten dengan Exit handler karena upaya yang salah arah dalam pengelolaan sumber daya. Kode yang dimaksud dipanggilProcess.Close()
setelahnyaProcess.Start(startInfo)
, alih-alih mengizinkan GC untuk mengumpulkannya pada waktunya. Kesalahan mudah jika latar belakang Anda adalah bahasa non-GC (misalnya C / C ++).EnableRaisingEvents
danEventHandlers
harus dilakukan tepat setelahProcess.Start()
. Itu tidak akan berhasil jika tidak.EnableRaisingEvents=true
sebelum meneleponProcess.Start()
dan berfungsi dengan baik.Dari MSDN :
Sudahkah Anda menyetel properti itu menjadi benar?
sumber
Anda harus menyetel
Process.EnableRaisingEvents
ketrue
.sumber
Setel koreksiProcess.EnableRaisingEvents = true
sumber
Saya telah menemukan contoh tempat itu
new Process()
diusing
klausa. Jangan lakukan itu jika Anda ingin menggunakanExited
fitur tersebut. Theusing
klausul menghancurkan misalnya bersama dengan pegangan acara padaExited
.Ini...
Haruskah ini ...
sumber