导出 (0) 打印
全部展开
此文章由人工翻译。 将光标移到文章的句子上,以查看原文。
译文
原文

DependencyObject.CheckAccess 方法

Silverlight

确定调用线程是否可以访问此对象。

命名空间:  System.Windows
程序集:  System.Windows(在 System.Windows.dll 中)

[EditorBrowsableAttribute(EditorBrowsableState.Never)]
public bool CheckAccess()

返回值

类型:System.Boolean
如果调用线程可以访问此对象,则为 true;否则,为 false

CheckAccess 为实用工具方法,该方法决定获取了 DependencyObject 的线程上下文是否与创建 DependencyObject 的线程相同。

  • 如果它为同一线程,那么 CheckAccess 返回 true 可以在该 DependencyObject 上执行操作。 这可能包括设置属性、调用方法等。

  • 如果当前线程上下文不是创建线程,那么 CheckAccess 返回 false 在这种情况下,几乎所有尝试更改 DependencyObject 上的值的操作的执行尝试将都引发异常。 但是,您可以从该 DependencyObject 检索 Dispatcher 值,并使用 Dispatcher API 来调用该操作。 有关更多信息,请参见Dispatcher托管线程处理概述

任何线程都可以检查它是否可以访问特定 DependencyObject

如果 CheckAccess 返回 false,这通常意味着您试图在主 UI 线程上从不是主 UI 线程的线程上下文访问 DependencyObject

BackgroundWorker 是委托线程执行不使用主 UI 线程的操作的可能选项。

下面的代码示例演示如何使用此方法检查是否可以针对 UI 线程上的 DependencyObject 执行操作,并在 CheckAccess 返回 false 的情况下使用 BeginInvoke


private delegate void AddTextDelegate(Panel p, String text);

private void AddText(Panel p, String text)
{
    p.Children.Clear();
    p.Children.Add(new TextBlock { Text = text });
}

private void TestBeginInvokeWithParameters(Panel p)
{
    if (p.Dispatcher.CheckAccess()) AddText(p, "Added directly.");
    else p.Dispatcher.BeginInvoke(
        new AddTextDelegate(AddText), p, "Added by Dispatcher.");
}


Silverlight

受以下版本支持:5、4、3

Silverlight for Windows Phone

受以下版本支持:Windows Phone OS 7.1、Windows Phone OS 7.0

有关 Silverlight 支持的操作系统和浏览器的列表,请参见 支持的操作系统和浏览器

社区附加资源

添加
显示:
© 2014 Microsoft