Mvvm PerformanceProgressBar“;无效的跨线程访问“;例外

Mvvm PerformanceProgressBar“;无效的跨线程访问“;例外,mvvm,windows-phone-7.1,silverlight-toolkit,multithreading,Mvvm,Windows Phone 7.1,Silverlight Toolkit,Multithreading,我正在开发WP7应用程序。我遇到了一些意想不到的行为。我使用SilverLight toolktit中的PerformanceProgressBar在我的应用程序中使用了几个页面。这些PerformanceProgressBars绑定到名为IsBusy的ViewModel属性。每个页面都有自己的ViewModel ….. public bool IsBusy { get { return this._isBusy;

我正在开发WP7应用程序。我遇到了一些意想不到的行为。我使用SilverLight toolktit中的PerformanceProgressBar在我的应用程序中使用了几个页面。这些PerformanceProgressBars绑定到名为IsBusy的ViewModel属性。每个页面都有自己的ViewModel

…..

    public bool IsBusy
    {
        get
        {
            return this._isBusy;
        }
        set
        {
            if (value == this._isBusy)
            {
                return;
            }

            this._isBusy = value;
            RaisePropertyChanged("IsBusy");
        }
    }
当我更改IsBusy值时,会出现“无效的跨线程访问”异常


任何想法?

对可视化树(即应用程序的UI)的任何更改都必须从UI线程执行。这包括通过绑定对属性进行的更改。我猜您正在通过后台线程更新此属性

在这种情况下,您需要通过Dispatcher将属性更改封送到UI线程

public bool IsBusy
{
    get
    {
        return this._isBusy;
    }
    set
    {
        if (value == this._isBusy)
        {
            return;
        }

        Application.Current.Dispatcher.BeginInvoke(() => {
          this._isBusy = value;
          RaisePropertyChanged("IsBusy");
        });
    }
}
这会将视图暴露给视图模型,因此不是很好的MVVM!在本例中,我将在您提供给ViewModel的单个方法接口IMarshalInvoke后面“隐藏”调度程序


或考虑使用后台工作人员,可以将更改的事件推到UI线程上。

< P>对可视化树的任何更改,即应用程序的UI,必须从UI线程执行。这包括通过绑定对属性进行的更改。我猜您正在通过后台线程更新此属性

在这种情况下,您需要通过Dispatcher将属性更改封送到UI线程

public bool IsBusy
{
    get
    {
        return this._isBusy;
    }
    set
    {
        if (value == this._isBusy)
        {
            return;
        }

        Application.Current.Dispatcher.BeginInvoke(() => {
          this._isBusy = value;
          RaisePropertyChanged("IsBusy");
        });
    }
}
这会将视图暴露给视图模型,因此不是很好的MVVM!在本例中,我将在您提供给ViewModel的单个方法接口IMarshalInvoke后面“隐藏”调度程序


或考虑使用后台工作人员,可以将更改的事件推到UI线程上。

您的猜测是正确的。我正在调用异步webservice方法,其中IsBusy属性在结果回调中更改为false。你能解释一下你对伊玛沙莱丁沃克的建议吗?你的猜测是正确的。我正在调用异步webservice方法,其中IsBusy属性在结果回调中更改为false。你能解释一下你对伊玛沙莱丁沃克的建议吗?