VS2010 Ошибка времени разработки при использовании WCF для загрузки данных времени разработки - PullRequest
0 голосов
/ 18 апреля 2011

Мужской. У меня есть следующее определение в проекте 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();
            }
        );

К сожалению, я получил System.ObjectDisposedException после завершения запроса WCF (я пытался отладить, используя другой экземпляр VS, подключившись к 1-му процессу экземпляра 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 отличается в режиме разработки. Не могли бы вы помочь мне решить проблему получения данных времени разработки с использованием WCF в конструкторе XAML VS2010?

1 Ответ

0 голосов
/ 18 апреля 2011

Во-первых, я верю, что делать вызов WCF на уроке времени проектирования - не самая лучшая практика! Вместо этого вы должны поместить некоторые статические фиктивные данные.

Для вашей проблемы попробуйте использовать Deployment.Current.Dispatcher напрямую, а не указывать на него переменную.

...