WPF 스레드 개체 액세스 문제 Dispatcher.Invoke
Programming Lv1/WPF + Blend / 2013. 1. 30. 10:23
다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다.
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없이 잘 돌아갑니다.
'Programming Lv1 > WPF + Blend' 카테고리의 다른 글
WPF MainWindow HWND 가져오기 (0) | 2013.04.09 |
---|---|
C# WPF 자식객체에서 부모객체 호출하기 (0) | 2013.01.30 |
RadGrideView 항목 수정, ReadOnly (0) | 2013.01.15 |
XamOutlookbar Group Click Event 적용 (0) | 2012.12.27 |
XamOutlookBar 레이아웃 변경 Blend (0) | 2012.12.26 |