.NET Framework
동기화 컨텍스트
수색…
비고
동기화 컨텍스트 (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