현재 실행중인 스레드가 GUI 컨텍스트에 있는지 여부를 어떻게 확인할 수 있습니까?스레드가 Gui 컨텍스트에 있는지 확인하십시오.
5
A
답변
5
GUI 컨텍스트를 구성하는 것이 항상 명확하지 않기 때문에 100 % 정확도로이 질문에 대답하기가 어렵습니다. 그것은 예/아니오 답보다 경험적입니다. GUI는 모든 GUI 프레임 워크마다 다릅니다.
는 WPF를 들어 좋은 그냥 무작위 스레드에 Dispatcher
을 설정하지만, 실제로는 참을 수 없어 속지 할 수있는 현재의 thread 그러나이
public static bool IsWpfGuiThread() {
return Dispatcher.FromThread(Thread.CurrentThread) != null;
}
에 대한 활성 Dispatcher
로 확인이 있는지 확인하는 것입니다 그 위에 GUI가 있습니다.
WinForms의 경우 현재 확인해야 할 것이 현재 SynchronizationContext
입니다.
public static bool IsWinFormsGuiThread() {
return SynchronizationContext.Current is WindowsFormsSynchronizationContext;
}
그러나 이것은 다른 동기 콘텍스트에 Current
값 재설정 일시적 사람 속지 (또는 그 이상) 할 수있다. 이것은 본질적으로 단지 글로벌 스레드이며 누구든지 설정할 수 있습니다. 실제로 Visual Studio와 같은 특정 응용 프로그램에서 변경하는 것이 일반적입니다 (그러나 WPF 응용 프로그램 임).
0
Dispatcher
개체가 필요하다고 생각합니다. http://social.msdn.microsoft.com/forums/en-US/wpf/thread/360540eb-d756-4434-86f9-a3449f05eb55
1
알려진 GUI 개체를 사용하고 있는지 여부를 묻는 질문을 통해 올바른 컨텍스트에 있는지 확인할 수 있습니까? 그 물건? 나는 이것을 위해 guiObject.VerifyAccess()
이 작동 할 것이라고 생각한다.
관련 문제
- 1. pthread 스레드가 블로킹되어 있는지 확인하십시오.
- 2. 속성이 있는지 확인하십시오.
- 3. 보류중인 변경 사항이 있는지 확인하십시오.
- 4. 세마포어의 모든 스레드가 완료되었는지 확인하십시오.
- 5. 개체에 포커스가 있는지 확인하십시오.
- 6. WCF 서비스가 있는지 확인하십시오.
- 7. 공백이 문자열에 있는지 확인하십시오.
- 8. 사용자가 있는지 확인하십시오 (계속 ...)
- 9. 컨트롤이 화면에 있는지 확인하십시오.
- 10. [i]가 있는지 확인하십시오.
- 11. 파일이 열려 있는지 확인하십시오.
- 12. 기본 뷰어가 있는지 확인하십시오.
- 13. 목록이 있는지 확인하십시오.
- 14. 전자 메일이 있는지 확인하십시오.
- 15. 요소가 있는지 확인하십시오.
- 16. 텍스트 파일이 있는지 확인하십시오.
- 17. BSTR이 비어 있는지 확인하십시오.
- 18. ID가 데이터베이스에 있는지 확인하십시오.
- 19. 배열 색인이 있는지 확인하십시오.
- 20. DB에 역할이 있는지 확인하십시오.
- 21. NSFetchedResultsController가 비어 있는지 확인하십시오.
- 22. 함수에 데코레이터가 있는지 확인하십시오.
- 23. jQuery : 이미지가 있는지 확인하십시오.
- 24. 클래스가 인스턴스화되어 있는지 확인하십시오.
- 25. 사용자 이름이 있는지 확인하십시오.
- 26. 콘텐츠가 iframe에 있는지 확인하십시오.
- 27. flowLayoutPanel이 비어 있는지 확인하십시오. #
- 28. DOM에 요소가 있는지 확인하십시오.
- 29. 시트가 엑셀에 있는지 확인하십시오.
- 30. 연결이 닫혀 있는지 확인하십시오!
나는 이것이 이전 답변이지만, WPF 응용 프로그램에 여러 UI 스레드가있을 수 있으며, [Dispatcher.FromThread()] (https : // msdn)을 사용하여 현재 스레드에서 활성 디스패처를 확인 할 수 있습니다. microsoft.com/en-us/library/system.windows.threading.dispatcher.fromthread(v=vs.110).aspx)는 UI 스레드 (또는 "the") 인 좋은 지표가 아닙니다. 이를 처리하는 가장 좋은 방법 중 하나는 장기 실행 또는 백그라운드 스레드를 시작하는 스레드의 SynchronizationContext를 추적하는 것입니다.이 단계는 비동기/대기가 도움이 될 수있는 곳입니다.이 대답이 처음 작성되었을 때 존재하지는 않습니다. – slugster