Как использовать процесс. Watforexit
-
27-10-2019 - |
Вопрос
Я называю приложение для 3-й части, которое «иногда» работает в VB.NET (это самостоятельный WCF). Но иногда стороннее приложение будет висеть навсегда, поэтому я добавил к нему 90-секундный таймер. Проблема в том, как я узнаю, если бы это время истекло?
Код выглядит так:
Dim MyProcess as System.Diagnostics.Process = System.Diagnostics.Process.Start(MyInfo)
MyProcess.WaitForExit(90000)
Что я хотел бы сделать что -то вроде этого
If MyProcess.ExceededTimeout Then
MyFunction = False
Else
MyFunction = True
End If
Любые идеи?
Спасибо,
Джейсон
Решение
Проверьте возвратное значение метода - http://msdn.microsoft.com/en-us/library/ty0d8k56.aspx - Если вызов истекло, он вернет ложь.
Другие советы
В прошлом были известные проблемы, где приложения будут замерзнуть при использовании waitforexit.
Вам нужно использовать
dim Output as String = MyProcess.StandardOutput.ReadToEnd()
перед звонком
MyProcess.WaitForExit(90000)
Обратитесь к фрагменту Microsoft:
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx
if(process.WaitForExit(timeout)) {
// user exited
} else {
// timeout (perhaps process.Kill();)
}