반응형
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);
질문의 진정한 의도를 찾고있는 미래의 방문자 :
StaTaskScheduler
이 답변 에서 지적한대로 사용- DIY 버전 : 작업에 ApartmentState 설정
참고 URL : https://stackoverflow.com/questions/5971686/how-to-create-a-task-tpl-running-a-sta-thread
반응형
'developer tip' 카테고리의 다른 글
Qt의 신호 및 슬롯과 관련하여 delete 및 deleteLater가 어떻게 작동합니까? (0) | 2020.10.27 |
---|---|
정적 const int에 대한 정의되지 않은 참조 (0) | 2020.10.27 |
PowerShell Set-Content 및 Out-File-차이점은 무엇입니까? (0) | 2020.10.27 |
JLabel의 여러 줄 텍스트 (0) | 2020.10.27 |
jQuery 찾기 및 문자열 바꾸기 (0) | 2020.10.26 |