2009-10-23 5 views
9

Dispatcher이 일시 중단 된 경우 (Dispatcher.DisableProcessing()) 메시지 상자를 표시하려고하면 예외가 발생합니다.Dispatcher.DisableProcessing이 활성화되어 있는지 어떻게 알 수 있습니까?

InvalidOperationException : 'Dispatcher 처리가 일시 중단되었습니다'(here 참조).

사람이 Dispatcher이 일시 중단되지 않았거나 어디 감지 할 수있는 방법을 알고 있나요 는 (그래서 나는 경우 BeginInvoke() 전화를 알고)

?

편집 1 : 나는 메시지 박스를 보여주기 위해 노력하고있어 Application.DispatcherUnhandledException 이벤트에 대한 반응에서

. 그러나 데이터 바인딩 중에 처리되지 않은 예외 (예 : ItemsControl.ItemsSource)가 발생하면 Dispatcher이 일시 중지됩니다. MessageBox을 표시하려고하면 실패합니다. 항상 Dispatcher.BeginInvoke()을 사용하면 문제가 해결되지만, 실제로 필요하지 않는 한 그렇게하고 싶지는 않습니다.

편집 2 :이 다음과 같이 작동 달성하기 위해 반사를 사용하여

:

var dispatcherType = typeof(Dispatcher); 
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic); 
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher); 
var suspended = count > 0; 
+0

I 따라서 현재 위치에서 완전한 질문을하고, 여기에서 자세한 내용을 제공하는 것이 좋습니다. –

답변

0

당신이 중지 여부를인지 말할 수있는 법적 방법을하지 않아도이 공용 인터페이스가 없습니다. 당신은 여전히 ​​리플렉션을 사용할 수 있지만, 일반적으로 이것은 당신이 완전히 잘못된 것을하고 있음을 나타냅니다.

자세한 내용을 알려 주시면 적절한 해결책을 제안 할 수 있습니까?

+1

Application.DispatcherUnhandledException 이벤트에 대한 반응으로 MessageBox를 표시하려고합니다. 그러나 DataBinding (예 : ItemsControl.ItemsSource) 중에이 처리되지 않은 예외가 발생하면 Dispatcher가 일시 중단됩니다. MessageBox를 표시하려고하면 실패합니다. 항상 Dispatcher.BeginInvoke()를 사용하여 문제를 해결하지만 실제로 필요하지 않으면 문제를 해결하고 싶지 않습니다. – Muri

-1

이 시도 :

if(currentDispatcher.Thread.ThreadState == System.Threading.ThreadState.Suspended) 
{ 

} 
+0

이것은 작동하지 않습니다. ThreadState는 DisableProcessing 시간 동안 여전히 "실행 중"입니다. –

관련 문제