Вопрос

Я пытаюсь выяснить это, учитывая следующий код, необходимо возникнуть в потоке UI? Кажется, работает, и мне интересно, на самом деле ли 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();
            });
    }
Это было полезно?

Решение

За документацию Microsoft на CollectionViewsource. Объектом CollectionViewsource не безопасен в потоке. Похоже, что это не сообщается, что это безопасно, даже если он, похоже, работает во многих ситуациях.

Это может быть потому, что этот метод называется на самом деле на самом деле, а не коллекцияViewsource. Вид возвращает Iconlectionview. Интерфейс - детали вспомогательного класса не известны, за исключением того, что метод Createview () создает это.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top