>백엔드 개발 >C++ >GUI를 정지하지 않고 C#에서 프로세스 종료를 비동기적으로 기다릴 수 있는 방법은 무엇입니까?

GUI를 정지하지 않고 C#에서 프로세스 종료를 비동기적으로 기다릴 수 있는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-04 14:25:43450검색

How Can I Asynchronously Wait for Process Exit in C# Without Freezing the GUI?

비동기적으로 프로세스 종료 대기

많은 애플리케이션에서 더 진행하기 전에 프로세스가 종료될 때까지 기다리는 것이 필수적입니다. 그러나 Process.WaitForExit()를 사용하면 그래픽 사용자 인터페이스(GUI)가 정지될 수 있습니다. 이 문제를 방지하려면 이벤트 기반 또는 스레드 기반 솔루션이 필요합니다.

이벤트 기반 접근 방식

.NET 4.0/C# 5부터 비동기 패턴은 대기 프로세스를 표현하는 보다 우아한 방법을 제공합니다. WaitForExitAsync() 메서드를 Process 클래스에 추가하면 애플리케이션이 프로세스가 종료될 때까지 비동기적으로 기다릴 수 있습니다.

public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken))

메서드 내부:

  • 프로세스가 이미 종료된 경우 메서드는 완료된 작업을 즉시 반환합니다.
  • 그렇지 않으면 TaskCompletionSource 이 생성되고 프로세스의 EnableRaisingEvents 속성이 true로 설정됩니다.
  • 프로세스 종료 시 작업 완료 소스의 결과를 설정하는 프로세스의 Exited 이벤트에 이벤트 핸들러가 연결됩니다.
  • 취소 토큰이 제공되면 호출 시 작업을 취소하도록 등록됩니다.
  • 작업이 반환되며, 프로세스가 종료되거나 취소 토큰이 호출됩니다.
  • 사용

    WaitForExitAsync() 메서드를 사용하려면:

    public async void Test()
    {
        var process = new Process("processName");
        process.Start();
        await process.WaitForExitAsync();
    
        // Do some fun stuff here...
    }

    위 내용은 GUI를 정지하지 않고 C#에서 프로세스 종료를 비동기적으로 기다릴 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.