DispatcherObject.CheckAccess() 및 verifyAccess()가 Intellisense에서 숨겨진 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/17500

  •  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
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top