수색…


비고

동기화 컨텍스트 (Synchronization Context)는 작업 예약 방법을 알지 못하게 코드를 사용하여 작업 단위를 스케줄러에 전달하는 추상화입니다.

동기화 컨텍스트는 코드가 특정 스레드에서 실행되도록하기 위해 전통적으로 사용됩니다. WPF 및 Winforms 응용 프로그램에서는 UI 스레드를 나타내는 SynchronizationContext 가 프레젠테이션 프레임 워크에서 제공됩니다. 이런 식으로 SynchronizationContext 는 대리자의 생산자 - 소비자 패턴으로 생각할 수 있습니다. 작업자 스레드는 실행 코드 (위임)를 생성 하고 UI 메시지 루프에 의해 소비 또는 소비 합니다.

작업 병렬 라이브러리는 동기화 컨텍스트를 자동으로 캡처하고 사용하는 기능을 제공합니다.

배경 작업을 수행 한 후 UI 스레드에서 코드 실행

이 예제는 SynchronizationContext 를 사용하여 백그라운드 스레드에서 UI 구성 요소를 업데이트하는 방법을 보여줍니다.

void Button_Click(object sender, EventArgs args)
{
    SynchronizationContext context = SynchronizationContext.Current;
    Task.Run(() =>
    {
        for(int i = 0; i < 10; i++) 
        {
            Thread.Sleep(500); //simulate work being done
            context.Post(ShowProgress, "Work complete on item " + i);
        }
    }
}

void UpdateCallback(object state)
{
    // UI can be safely updated as this method is only called from the UI thread
    this.MyTextBox.Text = state as string;
}

이 예제에서 for 루프 내에 MyTextBox.Text 를 직접 업데이트하려고 시도하면 스레딩 오류가 발생합니다. UpdateCallback 동작을 SynchronizationContext 게시하면 텍스트 상자가 나머지 UI와 동일한 스레드에서 업데이트됩니다.

실제로 진행률 업데이트는 System.IProgress<T> 인스턴스를 사용하여 수행해야합니다. 기본 구현 System.Progress<T> 자동으로 생성 된 동기화 컨텍스트를 캡처합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow