Является ли Silverlight's CollectionViewSource поточно-ориентированным? - PullRequest
1 голос
/ 05 августа 2010

Я пытаюсь выяснить это, учитывая следующий код, нужно ли выполнять Refresh () в потоке пользовательского интерфейса?Кажется, это работает, и мне интересно, действительно ли CollectionViewSource является объектом с поддержкой потоков / безопасным?Он определенно имеет свойства и методы для поддержки вызова в нужном потоке, но не уверен, что это оставлено на усмотрение разработчика или это выполняется внутри объекта?

public CollectionViewSource UserList { get; private set; }
    void setupCollections()
    {
        UserList = new CollectionViewSource();
        UserList.Source = searchProvider.UserResults;
        UserList.SortDescriptions.Add(new SortDescription("DisplayName", ListSortDirection.Ascending));
    }

Безопасен ли этот поток в Silverlight???

void RefreshUserList()
    {
        UserList.View.Refresh();
    }

Или вам нужно сделать что-то подобное?

void RefreshUserList()
    {
        // Is This Required?
        UserList.Dispatcher.BeginInvoke(() =>
            {
                UserList.View.Refresh();
            });
        // Or MVVM-light Method
        DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                UserList.View.Refresh();
            });
    }

1 Ответ

0 голосов
/ 05 августа 2010

Согласно документации Microsoft по CollectionViewSource объект CollectionViewSource не является поточно-ориентированным.Похоже, что это не является потокобезопасным, хотя, похоже, работает во многих ситуациях.

Это может быть потому, что вызываемый метод фактически находится в представлении, а не в CollectionViewSource.Представление возвращает интерфейс ICollectionView - детали вспомогательного класса неизвестны, за исключением того, что метод CreateView () создает это.

Я бы предложил, чтобы мы всегда рассматривали это не как нитьсохраните и отправьте его в правильный поток, хотя мое тестирование View.Refresh () по крайней мере предполагает, что он является потокобезопасным.

...