使用WCF加载设计时数据时的VS2010设计时错误

时间:2011-04-18 13:27:14

标签: silverlight design-time-data

君子。 我在Silverlight项目中有以下定义,MainPage.xaml:

<UserControl
xmlns:model="clr-namespace:Engine.Silverlight.Web.Views;assembly=Engine.Login.Model"
d:DataContext="{d:DesignInstance Type=model:DesignTimeModel, IsDesignTimeCreatable=True}">...

Engine.Login.Model项目中的类,用于设计时数据绑定(一切都适用于预初始化的属性,但是):

    public class DesignTimeModel : INotifyPropertyChanged
{
    public DesignTimeModel()
    {
        var d = Deployment.Current.Dispatcher;
        d.BeginInvoke(
            () =>
            {
                CacheClient c = new CacheClient();
                c.GetResourcesCompleted +=(s,e)=>
                    {
                        d.BeginInvoke(
                            () => this.Resources = e.Result);
                    };
                c.GetResourcesAsync();
            }
        );

不幸的是,在WCF请求完成后我得到了一个System.ObjectDisposedException(我试图通过附加到第一个VS实例进程使用不同的VS实例进行调试,但它没有帮助 - 同样的错误,没有其他信息):

System.ObjectDisposedException
Cannot access a disposed object.
Object name: 'Dispatcher'.
   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)

我假设Dispatcher行为在设计模式下有所不同。 您能否帮我解决问题,以便在VS2010 XAML设计器中使用WCF获取设计时数据?

1 个答案:

答案 0 :(得分:0)

首先,我相信在设计时间类中进行WCF调用并不是最佳实践!你应该改为放置一些静态虚拟数据。

对于您的问题,请尝试直接使用Deployment.Current.Dispatcher,而不是将变量指向它。