Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 07.08.2014
Сообщений: 63

Не удается организовать новый поток

25.11.2017, 13:57. Показов 972. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. У меня есть класс для работы с файлами. В какой-то момент я заполняю коллекцию данными файлов из указанной директории.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class PhotoCollection : ObservableCollection<Photo>
{
        public PhotoCollection() { }
 
        public PhotoCollection(string path) : this(new DirectoryInfo(path)) { }
 
        public PhotoCollection(DirectoryInfo directory)
        {
            _directory = directory;
            Update();
        }
 
        public string Path
        {
            set
            {
                _directory = new DirectoryInfo(value);
                Update();
            }
            get { return _directory.FullName; }
        }
 
        private void Update()
        {
            this.Clear();
            try
            {
                int cnt = 0;
                foreach (FileInfo f in _directory.GetFiles("*.jpg"))
                {
                    Add(new Photo(f.FullName, cnt));
                    cnt++;
                }
 
            }
            catch (DirectoryNotFoundException)
            {
                MessageBox.Show("Указанная директория не найдена!", "", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
 
        DirectoryInfo _directory;
}
Хотелось бы вынести заполнение в новый поток. Но при попытке сделать так внутри класса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void LoadFiles()
{
     int cnt = 0;
     foreach (FileInfo f in _directory.GetFiles("*.jpg"))
     {
           Add(new Photo(f.FullName, cnt));
           cnt++;
           Thread.Sleep(0);
     }
}
 
Thread myThread = new Thread(LoadFiles); //Создаем новый объект потока (Thread)
myThread.Start(); //запускаем поток
myThread.Join();
Вылетает исключение: "Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher." Почитал, что надо использовать Dispatcher.Invoke. Подскажите, пожалуйста, как правильно обернуть данный фрагмент кода Dispatcher.Invoke?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2017, 13:57
Ответы с готовыми решениями:

Что быстрее - после отработки кода, запускать новый экземпляр класса в новый поток или использовать рекурсию?
Собственно интересует такой вопрос, имеется класс реализующий интерфейс Runnable(нечто вроде ИИ), который запускается в отдельном потоке,...

Не удается открыть поток
Здравствуйте помогите решить проблему в браузере выдает ошибки, я так понял что типо файла или каталога не существует по этому пути...

Не удаётся запустить поток
#pragma once #include &quot;oLevel.h&quot; #include &lt;thread&gt; /* 12 апреля 1961 года Юрий Гагарин стал первым человеком в мировой истории,...

4
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
25.11.2017, 18:44
Если у вас приложения для устройств на Win10, то можно использовать https://github.com/ljw1004/uwp-desktop для асинхронного получения файлов или директорий.
C#
1
2
var folder = await StorageFolder.GetFolderFromPathAsync(path);
var files = await folder.GetFilesAsync();
0
0 / 0 / 1
Регистрация: 07.08.2014
Сообщений: 63
25.11.2017, 20:33  [ТС]
У меня обычное десктопное приложение )
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
26.11.2017, 01:02
То что я сбросил для десктопных приложений

Добавлено через 40 секунд
только подключите nugget пакет uwp-desktop
0
1595 / 600 / 185
Регистрация: 05.12.2015
Сообщений: 970
01.12.2017, 20:07
Добавить член класса:
C#
1
SynchronizationContext context;
В кострукторе класса строка:
C#
1
context = SynchronizationContext.current;;
Оператор добавления в ObservableCollection:
C#
1
context.Send ( delegate { Add(new Photo(f.FullName, cnt)); }, null );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2017, 20:07
Помогаю со студенческими работами здесь

Не удается записать данные в поток
Доброго времени суток. Создал клиент/сервер, после соединения клиент может отправлять данные серверу, а при попытке отправки сообщения...

Как организовать поток данных с LPT?
Мне нужно вводить с LPT-порта данные, и обрабатывать их в соответствии с БД полученных данных. Подскажите как это сделать? Я не могу найти...

Как организовать поток в FMX C++ Builder?
Как, не используя средства Delphi, организовать поток? Буду признателен за намек или может быть даже пример.

Не удается использовать функцию gets в программе, где создается поток
Приветствую всех. Я в меру своих возможностей изучаю С++ по книге Г. Шилдта. Время от времени пытаюсь самостоятельно писать небольшие...

не удается организовать вывода из файла!
бинарный файл содержит целые числа, каждая пара чисел определяет числитель и знаменатель дроби, как это возможно организовать? помогите,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru