2013. 5. 8. 18:10
   ,

간만에 WPF를 하는데.....

버튼으로 테스트해보니 프로그램이 잘 돌아가서 타이머를 하나 만들어서 주기적으로 실행하려고 돌렸는데...

에러가 퐝~




1. 원인

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


혹은

"다른 스레드가 소유하고 있는 오브젝트에 현재 스레드가 접근할 수 없다"

(The calling thread cannot access this object because a different thread owns it.)

이런 식의 오류가 나기도 합니다.


하도 오랜만에 WPF를 해서 감이 없네요;;

WPF나 실버라이트에서 타이머는 다른 스레드기 때문에 UI스레드를 접근할 때 에러가 납니다.



2. 해결 방법

이럴 때는 윈폼과 마찬가지로 인보크를 사용하여 작업해야 합니다.

(참고 : MSDN - Dispatcher.Invoke 메서드)

 

 간단하게 인보크를 사용할 수 있습니다.

 

Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
	{
		//사용할 메서드 및 동작
		ScrollGraph_001.AddStep(LastData);
	}));

참 쉽죠?


마무리

WPF 뿐만 아니라 C#도 UI는 다른 스래드에서 동작합니다.

신경 안 쓰면 가끔 까먹는 내용이죠 ㅎㅎㅎ

  1. 알 수 없는 사용자 2013.05.09 02:28  Address  Edit/Delete  Reply

    포스팅 잘보고 갑니다. ^^

댓글 작성

이름
패스워드
홈페이지
비밀글