|
7 / 7 / 4
Регистрация: 25.03.2013
Сообщений: 117
|
|
.NET 4.x Потокобезопасно изменить коллекцию08.01.2014, 17:26. Показов 4673. Ответов 62
Метки нет (Все метки)
Коллекция прибиндина (binding) к listbox-у на вьюшке. Данные из коллекции (статус) обновляются из интернета, что может происходить долго и для того, чтобы интерфейс не завис - все делаю в асинхронном методе. Проблема в том, что во время обновления юзверь может удалить или добавить в коллекцию items.
Попробывал заблочить клавиши "добавить" и "удалить" пока обновляется список, но беда - долго обновляться может а у юзверей нету терпения, и возможность удалять и добавлять в коллекцию данные во время ее обновления надо. То как потокобезопасно изменять коллекцию? Добавлено через 2 часа 30 минут Есть предложения?) ТК я в тупике)
0
|
|
| 08.01.2014, 17:26 | |
|
Ответы с готовыми решениями:
62
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
| 08.01.2014, 17:45 | |
|
Держать 2 коллекции (или двже 3). По окончании загрузки данных с интернета (или в процессе, в зависимости от требований/возможностей) синхронизировать изменения с прибинденой коллекцией и присваивать ей результат объединения.
1
|
|
| 08.01.2014, 18:32 | ||||||
|
Создайте свою коллекцию и там управляйте потоками. Например так
1
|
||||||
|
7 / 7 / 4
Регистрация: 25.03.2013
Сообщений: 117
|
|
| 08.01.2014, 21:05 [ТС] | |
|
Создавать свою коллекцию - это очень фундаментальное дело))
Т.к. я юзаю async/await - потоками управлять не могу напрямую. А смешивать sync и async не хочется. Я сейчас обдумываю идею с 2-я коллекциями (хотя дорогое это удовольствие, но что поделаешь)
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||
| 08.01.2014, 22:11 | ||
|
1
|
||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||
| 08.01.2014, 22:59 | ||
|
Как он нажмет удалить если на время синхронизации это действие заблокированно?
1
|
||
| 08.01.2014, 23:32 | ||
|
pycture, я не претендую на оригинальность, но вот это
1
|
||
|
7 / 7 / 4
Регистрация: 25.03.2013
Сообщений: 117
|
||
| 08.01.2014, 23:58 [ТС] | ||
|
На счет 2 коллекций: пока 1 коллекция обновляеться (аля лезим в сеть и т.д.) - 2-ю коллекцию пользователь может менять как хочет. А когда данные есть (после обновы) - обновить статус тех членов коллекции, которые имеют похожий ID. Думаю ссылку на строку перенести не так долго займет времени...+ синхронизировать ничего не надо. Это пока-что такая ИДЕЯ. Мож я в чем-то ошибаюсь?
0
|
||
| 09.01.2014, 00:03 | ||
|
1
|
||
|
burning1ife
|
|
| 09.01.2014, 00:58 | |
|
Я вот если честно, не понисаю в чем проблема. А она, скорее всего, в неправильном проектировании.
Если вы используете async await, то вы можете возвращают значение из таких методов, а не менять коллекцию там же. Получили значение через асинхронны метод, нашли элемент с таким id, если он есть обновили его значения, если нет, то ничего не делаем. А вообще сложно судить без кода. Добавлено через 3 минуты А если просто: не меняйте элементы коллекции в асинхронном потоке, а получайте данные асинхронно и присваивайте значения этому элементу, если его еще не удалили.
1
|
|
|
7 / 7 / 4
Регистрация: 25.03.2013
Сообщений: 117
|
|
| 09.01.2014, 01:31 [ТС] | |
|
kenny69, Спасибо! Правильно думать - смысл всей этой возни) Второй раз ставишь на путь истынный. Спасибо)
И в общем - ВСЕМ СПАСИБО за пищу для ума и поддержку)
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||
| 09.01.2014, 07:39 | ||
|
1
|
||
| 09.01.2014, 12:17 | ||
|
1
|
||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|||
| 09.01.2014, 12:42 | |||
|
http://msdn.microsoft.com/ru-r... 00%29.aspx
0
|
|||
| 09.01.2014, 12:49 | |||||||
|
Во вторых, какой толк от finally в таком коде:
Но поверьте мне на слово, если человек начинает использовать try-catch в том месте, где не до конца разобрался с алгоритмом - это просто катастрофа, потом концов не найдешь, обработчик должен быть один (легче логировать), программист должен писать правильно код, а не так, вот тут периодически падает, но вроде ни на что не влияет, поставлю try.
0
|
|||||||
| 09.01.2014, 13:02 | |
|
0
|
|
| 09.01.2014, 13:09 | |||||||
|
Давайте для примера возьмем форму, на ней три текстбокса, первый x, второй y, третье результат x/y. И кнопка вычисления. Вот код который пишут в моей команде, при чеем прошу заметить в таком подходе я специально запрещаю использование обработок ошибок, т.к. вы выражаетесь поросль делает уйму ошибок, например как здесь не обработанное DevideByZero
0
|
|||||||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||||||
| 09.01.2014, 14:23 | ||||||
|
Можно конечно и так. Хотя логгирование кривых значений начальных данных, да еще и через исключения - это точно не моё. Теперь по коду. Логика обработки значений не всегда такая простая и тем более пользователь может быть вообще без понятия, что у него там чтото на чтото делится. В результате выскакивающий из табакерки "Деление на ноль" ничего ему не говорит (пользователей читающих документацию я еще ни разу не видел), и как правило заканчивается воплями "ниче не работает", а в клинических случаях разбором полетов с программерами (и такое бывает). Если же воспользоваться ненавистным вам catch, то можно безымянный DivideByZeroException перевести в вполне осознанное сообщение для пользователя
Всех ошибок конечно не обработаешь, но даже частичное применение этого позволяет существенно повысить информативность ошибок, и в результате снизить число вопросов к разработчикам. А теперь можно посмотреть на другой специфичный случай. Есть коллекция (неважно какая), ее нужно преобразовать в другую (загрузить файлы если это имена файлов, чтото сложное посчитать, собрать данные с 10 веб-сервисов и т.д.), всю. Если элемент нельзя загрузить/посчитать ему должно быть присвоено значение по умолчанию. Процедура загрузки/расчета каждого отдельного элемента может упасть по любой причине с исключением. Вопрос: как без try catch добится получения коллекции?
0
|
||||||
| 09.01.2014, 14:23 | |
|
Помогаю со студенческими работами здесь
20
Отобразить коллекцию Реализовать коллекцию Отсортировать коллекцию
Объект в коллекцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|