Lớp System.Windows.Threading.DispatcherObject
(trong đó DependencyObject
được dựa trên) chứa hàm hữu ích, được gọi là CheckAccess()
, xác định xem mã có đang chạy trên chuỗi giao diện người dùng hay không.Tại sao DispatcherObject.CheckAccess() và VerifyAccess() bị ẩn khỏi Intellisense?
Khi tôi muốn sử dụng nó ngày hôm qua, tôi đã bối rối khi phát hiện ra rằng Intellisense không hiển thị chức năng (cũng không phải VerifyAccess()
, mà ném ngoại lệ khi không ở trên chuỗi giao diện người dùng), mặc dù thư viện MSDN liệt kê nó. Tôi quyết định điều tra lớp bằng cách sử dụng Reflector. Dường như chức năng được đề cập có thuộc tính EditorBrowsable(EditorBrowsableState.Never)
gắn liền với nó. Lớp Dispatcher
, được sử dụng bởi DispatcherObject
, có thuộc tính giống nhau gắn liền với CheckAccess()
và 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();
// ...
}
Tôi không tin rằng việc áp dụng thuộc tính đó là ngẫu nhiên (hoặc một trò đùa), vì vậy câu hỏi của tôi là : tại sao nó lại ở đó? Những phương pháp đó có nên được gọi trực tiếp không? Vậy tại sao họ không phải là protected
(hoặc internal
, giống như một số phương pháp hữu ích nhất trong WPF)?
Trang Kết nối Microsoft được liệt kê ở trên không còn khả dụng nữa. Đây là một báo cáo mới, trong trường hợp bất kỳ ai muốn tiếp tục hành lang để thay đổi điều này: https://connect.microsoft.com/VisualStudio/feedback/details/3133453 –