Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
7 / 7 / 4
Регистрация: 25.03.2013
Сообщений: 117
.NET 4.x

Потокобезопасно изменить коллекцию

08.01.2014, 17:26. Показов 4854. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллекция прибиндина (binding) к listbox-у на вьюшке. Данные из коллекции (статус) обновляются из интернета, что может происходить долго и для того, чтобы интерфейс не завис - все делаю в асинхронном методе. Проблема в том, что во время обновления юзверь может удалить или добавить в коллекцию items.
Попробывал заблочить клавиши "добавить" и "удалить" пока обновляется список, но беда - долго обновляться может а у юзверей нету терпения, и возможность удалять и добавлять в коллекцию данные во время ее обновления надо.
То как потокобезопасно изменять коллекцию?

Добавлено через 2 часа 30 минут
Есть предложения?) ТК я в тупике)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2014, 17:26
Ответы с готовыми решениями:

Изменить коллекцию в forEach
Задача: сделать uppercase всех слов, длина которых больше 3 символов. Как это сделать с помощью стрима? Мой набросок(значение элементов в...

Потокобезопасно ли одновременно добавлять в конец list обьекты и удалять из середины?
Добрый день. Потокобезопасно ли одновременно добавлять в конец list обьекты и удалять из середины? Есть два потока. Один парсит лист и...

Дано число R и коллекцию размера N. Преобразовать коллекцию, заменив все ее положительные элементы на число R
Всем доброго времени суток. Вот такая задачка. Дано число R и коллекция размера N. Преобразовать коллекцию, заменив все ее...

62
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
10.01.2014, 22:04
Студворк — интернет-сервис помощи студентам
Мне кажется, что истина где-то посередине.
Если бы у меня был метод, который должен вернуть результат деления двух чисел в строковом выражении, я бы сделал вот так:
C#
1
2
3
4
5
6
7
 double Divide(string s1, string s2)
        {
            int x, y;
            x = int.Parse(s1);
            y = int.Parse(s2);
            return x / y;
        }
Использование:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 try
            {
                 var result = Divide(s1, s2);
            }
            catch (FormatException)
            {
                MessageBox.Show("Неверные входные параметры");
            }
            catch (DivideByZeroException)
            {
                MessageBox.Show("Деление на ноль");
            }
Можно сделать и без try / catch:
В моем понимании, если метод начинается со слова Try, то он не бросит исключений, и в любом случае вернет результат
C#
1
2
3
4
5
6
7
8
9
 bool TryDivide(string s1, string s2, out double result)
        {
            int x=0, y=0;
            var isValid = int.TryParse(s1, out x) && int.TryParse(s2, out y) && y != 0;
            if (isValid)
                result = x/y;
            else result = 0;
            return isValid;
        }
.
Использовать так:
C#
1
2
3
4
5
 double result;
            if (TryDivide(s1, s2,out result))
            {
                MessageBox.Show("Что-то пошло не так");
            }
Оба подхода, мне кажется верны и имеют право на существование. Но для того и другого случая, если у меня операция Divide находится достаточно глубоко, я бы предпочел первый вариант, т.к. внесение изменений в такой код проходит более безболезненно. Обработка соответственно на верхнем уровне.
Вот еще рекомендации по обработке исключений http://msdn.microsoft.com/en-u... 29005.aspx

Но я бы все таки не стал все методы огораживать параметром out error(тут я солидарен с товарищем Psilon).
Хотя может бы и сделал случае, например, api сайта, когда надо вернуть пользователю ответ, т.к. он не может посмотреть лог ошибок у меня на сайте.

А на вводимые пользователем в программу параметры я бы сделал Validation (как советует Grishaco).
0
438 / 362 / 100
Регистрация: 29.06.2010
Сообщений: 981
Записей в блоге: 1
10.01.2014, 22:09
Цитата Сообщение от Psilon Посмотреть сообщение
чтобы узнать, какие параметры валидны, вы должны узнать, как устроен метод и что именно он хочет - является ли null-строка валидной, или она должна быть string.Empty, или она должна быть непустой, или она должна начинаться с буквы или цифры,...
В принципе не обязательно, т.к. если метод имеет нормальное описание, тогда можно узнать какие исключения он кидает просто наведя мышь на тип или метод и студия в подсказке покажет.

Да дискуссия получилось длинной. Было интересно узнать другое мнение.

Не по теме:


ТС наверное офигивает, вроде задал обычный вопрос...

1
7 / 7 / 4
Регистрация: 25.03.2013
Сообщений: 117
11.01.2014, 17:08  [ТС]
Цитата Сообщение от Grishaco Посмотреть сообщение

Не по теме:


ТС наверное офигивает, вроде задал обычный вопрос...

Не по теме:

Да. Есть немножко:D.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2014, 17:08
Помогаю со студенческими работами здесь

Отобразить коллекцию
Возник следующий вопрос: Некоторым образом формируется коллекция документов. Хотелось бы всю эту коллекцию выводить во вью в...

Реализовать коллекцию
Задание. Создать класс Student с двумя полями и конструктором с параметрами. Если нужно добавить в класс дополнительные методы или...

Отсортировать коллекцию
Нужно отсортировать объем двигателя (FUELCONSUMPTION ) по возрастающей public class Bentley extends AbstractCar { private...

Заполнить коллекцию
Создать коллекцию для пар Student, int. Создать метод который будет добавлять в коллекцию пару Student, int. Целое число должно быть...

Объект в коллекцию
Хочу, чтобы объекты которые я создаю (Person person1 = new Person), каждый при создании, автоматически ложился в List и я мог вывести на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
63
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru