WinForms 응용 프로그램의 백그라운드 스레드에서 .NET class Screen
을 사용하여 성공적으로 정의 된 동작인지 궁금했습니다.Screen 클래스를 백그라운드 스레드에서 사용할 수 있습니까?
나는 현재와 같은 기본 화면의 픽셀 크기를 읽고 있어요 : 나는 궁금하네요 왜
var w = Screen.PrimaryScreen.Bounds.Width;
var h = Screen.PrimaryScreen.Bounds.Height;
이유 것은 윈폼 클래스 used from the foreground thread only 경향이 있다는 것입니다, 나는 어떤 문서가 있는지 진술을 찾을 수 없습니다 Screen
클래스는 백그라운드 스레드에서 사용하는 것이 안전합니다.
그래서 내 질문은 :
는 백그라운드 스레드에서 Screen.PrimaryScreen.Bounds
속성을 읽어 OK인가?
업데이트 1 :
내 질문 스레드 안전에 대한 하지이므로주의 해주십시오. 그것은 백그라운드 스레드에서 UI 요소에 액세스하는 것입니다.
예. ILSpy을 사용하여이 메서드가 내부적으로 ReleaseDC
인 일 수도 있고이 백그라운드 스레드에서 호출 될 때 허용되지 않거나 정의되지 않은 결과를 발생시키는 것을 발견했습니다.
업데이트 2 : downvoting이 질문을 닫 신고에 대한
감사합니다.
- 배경 스레드가 어떤 메시지 펌프가 없습니다와
Screen
클래스가 하나가 필요할 수 있습니다나는 아직도이 이 때문에, 비 명백한 될 수 있다고 생각 않습니다.
- 클래스는 System.Windows.Forms 어셈블리에 있으며 특별한주의가 필요함을 나타낼 수 있습니다.
읽기 전용이므로 이유가 없습니다. – TaW
음, 게시 한 링크에 '스레드 안전성'섹션이 있습니다. 그러나 모든 WinForms 클래스가 백그라운드 스레드에서 안전하지는 않습니다. – Steve
Funny : _Any public static (Visual Basic의 Shared) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 쓰레드 안전성을 보장하지 않습니다. _ 이제'Bounds'는 아니지만'GetBounds()'가 있습니다. – TaW