Silverlight's CollectionViewsource Thread-Safe?
-
26-09-2019 - |
Вопрос
Я пытаюсь выяснить это, учитывая следующий код, необходимо возникнуть в потоке 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 (), по крайней мере, предполагает, что он безопасен.