Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2017, 13:58   #1
Auratos
Пользователь
 
Регистрация: 01.06.2015
Сообщений: 20
По умолчанию Не удается организовать новый поток

Добрый день. У меня есть класс для работы с файлами. В какой-то момент я заполняю коллекцию данными файлов из указанной директории.
Код:
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;
}
Хотелось бы вынести заполнение в новый поток. Но при попытке сделать так внутри класса:
Код:
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?
Auratos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.NET 4.x Передача в новый поток метода с параметрами из другого класса maxspace C# (си шарп) 1 25.03.2013 14:26
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запраш Richik123 Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2012 16:28
Организовать текстовый файл f, состоящий из N строк. Организовать замену символов в файле. "Старый" символ и "новый" символ запра Richik123 Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2012 17:32
Не удается связать поток+idHttp+прогресс бар grafgrial Общие вопросы Delphi 1 24.05.2011 15:46