어딘가를 종료 대기 : Form.Closing
이벤트에부드럽게 응용 프로그램을 닫기하고, <a href="https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx" rel="nofollow"><code>Process</code></a> 유형 인 내가 <code>proc</code>의 인스턴스를 생성 응용 프로그램에서이 같은
proc = new Process();
proc.EnableRaisingEvents = true;
proc.StartInfo.FileName = Settings.Instance.OBSExeFile;
proc.Exited += (a, b) => doSomething();
proc.Start();
proc.WaitForInputIdle();
, 나는 부드럽게 닫으시겠습니까 , 아직 열려 있다면.
내가 (둘Close()
도
Kill()
도
CloseMainWindow()
내 요구에 맞게 보이지 않았다) 그래서 다음과 같이 응용 프로그램에
WM_CLOSE
를 보내고
Process.WaitForExit()
를 호출하고 최대 eneded의 .NET 내에서 고유 물건이 작업을 수행하는 다른 방법을 찾을 :
if (proc != null && !proc.HasExited) {
if(SendMessage(proc.MainWindowHandle, WM_CLOSE, 0, IntPtr.Zero) == 0)
proc.WaitForExit();
}
내 질문은 :이되는 에서 위험한 어떤 방법을 혼합하는 의미에서 뭔가를 놓치고 있습니까? 예를 들어, WaitForExit()
을 영원히 정지시킬 수 있습니까?
"누락 된 항목"인지 묻는 것은 너무 광범위합니다. 당신이 누락 될 수있는 많은 것들이 있습니다; 위의 게시물에서 전체 연구 노력에 대한 모든 세부 사항을 제공하지 않았다면 간과 할 수도있는 것을 알 수있는 방법이 없습니다. 마지막으로 그러한 세부 사항을 모두 제공했다면, 충분한 연구를하지 못한 것입니다. 'WaitForExit()'가 멈출 수 있습니까? 물론 ... WM_CLOSE를 윈도우에 보낼 때 주어진 프로세스가 종료된다는 보장은 없습니다. 협력 적으로 폐쇄되는 메커니즘은 모두 동일한 위험을 겪습니다. Windows가 말했을 때 닫히지 않는 프로세스에 대한 제한 시간을 제공하는 이유입니다 –