소연의_개발일지
article thumbnail

 

오류 내용

System.InvalidOperationException: '많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다.'

 

오류 이유

WPF나 실버라이트에서 타이머는 다른 쓰래드기때문에 UI쓰래드를 접근할때 에러가 난다고 한다.
이럴때는 윈폼과 마찬가지로 인보크를 사용하여 작업을 해야 한다.

 

해결 방법

 // 다른 쓰레드에서 UI 쓰레드 접근하기 => 윈폼과 마찬가지로 인보크를 사용하여 작업
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
    // 실행 할 부분 넣기
}));

이렇게 처리하니 해결되었다.

 

invoke는 동기적으로 실행된다고 한다. 아직 c#이 어렵다..

 

참고 링크

https://learn.microsoft.com/ko-kr/dotnet/api/system.windows.threading.dispatcher.invoke?view=windowsdesktop-7.0&redirectedfrom=MSDN#overloads 

 

Dispatcher.Invoke 메서드 (System.Windows.Threading)

Dispatcher가 연결된 스레드에서 지정된 대리자를 동기적으로 실행합니다.

learn.microsoft.com

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!