developer tip

STA 스레드를 실행하는 작업 (TPL)을 만드는 방법은 무엇입니까?

copycodes 2020. 10. 27. 08:20
반응형

STA 스레드를 실행하는 작업 (TPL)을 만드는 방법은 무엇입니까?


Thread 사용은 매우 간단합니다.

 Thread thread = new Thread(MethodWhichRequiresSTA);
 thread.SetApartmentState(ApartmentState.STA);  

WPF 애플리케이션에서 작업을 사용하여 동일한 작업을 수행하는 방법은 무엇입니까? 다음은 몇 가지 코드입니다.

Task.Factory.StartNew
  (
    () => 
    {return "some Text";}
  )
   .ContinueWith(r => AddControlsToGrid(r.Result));  

InvalidOperationException이 발생합니다.

많은 UI 구성 요소가이를 필요로하므로 호출 스레드는 STA 여야합니다.


TaskScheduler.FromCurrentSynchronizationContext 메서드사용하여 현재 동기화 컨텍스트 (WPF 애플리케이션을 실행할 때 WPF 디스패처)에 대한 TaskScheduler 를 가져올 수 있습니다 .

그런 다음 TaskScheduler를 허용하는 ContinueWith 오버로드를 사용합니다 .

var scheduler = TaskScheduler.FromCurrentSynchronizationContext();

Task.Factory.StartNew(...)
            .ContinueWith(r => AddControlsToGrid(r.Result), scheduler);

질문의 진정한 의도를 찾고있는 미래의 방문자 :

참고 URL : https://stackoverflow.com/questions/5971686/how-to-create-a-task-tpl-running-a-sta-thread

반응형