블로그 이미지
평강왕자

카테고리

분류 전체보기 (35)
Programming Lv1 (32)
Programming LV2 (0)
취미 (3)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다.

Exception이 발생하면서 프로그램이 죽어버렸다.

C# WPF을 시작한지 얼마되지 않아서 검색 해 보니 WPF는 메인스레드가 UI 객체를 가지고 있어서 다른 스레드에서 접근하여

사용하려 하면 Exception을 발생시킨다고 하더군요;;

해결 방법은 Dispatcher.Invoke(DispatcherPriority, Delegate) 함수를 사용하면 해결 됩니다.

http://msdn.microsoft.com/ko-kr/library/ms591593.aspx <-- msdn링크

설명은 잘 나와있습니다. 만능 MSDN;;

실제로 적용하면 아래와 같은 코드를 다른 스레드에 집어넣어서 사용하면 Exception이 발생합니다.

controlSendBtn.Visibility = Visibility.Collapsed;

이것을 아래와 같이 바꿔줍니다.

Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
{
    controlSendBtn.Visibility = Visibility.Collapsed;
 }));

그러면 메인스레드와 동기화 시켜서 Exception없이 잘 돌아갑니다.

 

Posted by 평강왕자
, |

최근에 달린 댓글

글 보관함