在WPF中调用Dispatcher的问题

时间:2009-02-06 00:04:30

标签: c# wpf multithreading dispatcher

我有一些需要从我的后台演示者线程更新的UI代码。 所以,我做了以下事情: 从我的后台线程,我在UI中设置我的属性:

_ui.ConnectionStatus = "A";

然后,我的设置如下:

public string ConnectionStatus
{
    set
    {
        if (Dispatcher.CheckAccess())
            ConnectionStatusTxt.Content = value;
        else
        {
            Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
                              {ConnectionStatusTxt.Content = value;}));
        }
    }
}

我收到以下错误:

The calling thread cannot access this object because a different thread owns it.

我的理解是Dispatcher负责调用不同的线程,所以这个错误让我感到困惑。 谢谢!

2 个答案:

答案 0 :(得分:5)

另一个问题:什么类型的价值?这是一个字符串? 我可以想象,错误可能是该值实际上是您创建的UIElement(可能是Label?),在这种情况下异常是指值对象而不是您的用户控件。

答案 1 :(得分:0)

你没有说这个setter在里面执行什么对象,但看起来这个对象的Dispatcher与ConnectionStatusTxt的调度程序不同,即包含setter的对象由ConnectionStatusTxt控件的不同线程拥有。

尝试在CheckAccess和Invoke语句中使用ConnectionStatusTxt.Dispatcher。