DispatcherObject.CheckAccess() 및 verifyAccess()가 Intellisense에서 숨겨진 이유는 무엇입니까?
-
09-06-2019 - |
문제
그만큼 System.Windows.Threading.DispatcherObject
수업(어느 DependencyObject
기반)에는 다음과 같은 유용한 기능이 포함되어 있습니다. CheckAccess()
, 코드가 UI 스레드에서 실행 중인지 여부를 결정합니다.
어제 사용하려고 하다가 Intellisense가 해당 기능을 보여주지 않는다는 것을 알고 당황했습니다. VerifyAccess()
, 이는 UI 스레드가 아닐 때 예외를 발생시킵니다. MSDN 라이브러리에 나열되어 있더라도 마찬가지입니다.Reflector를 사용하여 수업을 조사하기로 결정했습니다.문제의 함수에 다음이 있는 것 같습니다. EditorBrowsable(EditorBrowsableState.Never)
그것에 첨부된 속성.그만큼 Dispatcher
에서 사용하는 클래스 DispatcherObject
, 에 동일한 속성이 첨부되어 있습니다. CheckAccess()
그리고 VerifyAccess()
:
public abstract class DispatcherObject
{
// ...
[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess();
[EditorBrowsable(EditorBrowsableState.Never)]
public void VerifyAccess();
// ...
[EditorBrowsable(EditorBrowsableState.Advanced)]
public Dispatcher Dispatcher { get; }
}
public sealed class Dispatcher
{
// ...
[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess();
[EditorBrowsable(EditorBrowsableState.Never)]
public void VerifyAccess();
// ...
}
나는 해당 속성의 적용이 무작위(또는 농담)라고 생각하지 않으므로 내 질문은 다음과 같습니다.그게 왜 거기 있어?해당 메서드를 직접 호출하면 안 되나요?그렇다면 왜 그렇지 않습니까? protected
(또는 internal
, WPF에서 가장 유용한 방법 중 일부)?
해결책
마이크로소프트 직원 최근에 밝힌 CheckAccess는 "고급 시나리오"에만 사용되므로 Intellisense에서는 숨겼습니다.
"체크 액세스와 verifyAccess는 항상 보이지 않는 것으로 표시되었으며, 지능적인 것은 그것을 존중하지 않았을 것입니다.Reflector를 사용하여 확인할 수 있습니다.여기서 아이디어는 CheckAccess 및 VerifyAccess가 일반 개발자가 필요하지 않은 발전 시나리오라는 것입니다.
그러나 나는 editorBrowsAbleState.advanced가 더 적절한 수준 일 것이라고 생각합니다. "
이 단점에 대한 Microsoft Connect 사례가 있습니다. 투표하세요 그것이 당신에게 중요하다면.
다른 팁
해당 메서드를 직접 사용해서는 안 된다는 문서를 찾을 수 없지만 오랫동안 살펴보지는 않았습니다.
또한 존재하지 않는 EditorVisibleAttribute를 참조합니다.Reflector에 따르면 EditorBrowsable속성.
반사판 분해:
[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}