Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Доброго времени
а подскажите пожалуйста как реализовать многопоток взятия картинок
есть папка с фото
далее в папке фото подпапки с фото
нужно брать 1 фото с папки к примеру 1(3) загружать
далее объединяю и загружаю все фото
потом удалить папку
как можно реализовать это , чтоб не брал одно и тоже
за ранее спасибо
Пути к картинкам или папкам забросьте в список и берите из списка строчки с удалением.
В итоге - каждый отдельный поток сможет взять только один путь.
В чём собственно проблема заключается?
Пути к картинкам или папкам забросьте в список и берите из списка строчки с удалением.
В итоге - каждый отдельный поток сможет взять только один путь.
В чём собственно проблема заключается?
Нет, я не о том, что Вы что-то на диске удалять должны (возможно должны, но это уже другая история).
Я о том, что необходимо пути к папкам забросить в список.
А далее с этого списка брать строчки с удалением.
И вот уже в этот момент, когда мы взяли строчку с удалением - мы фактически находимся в 1 потоке.
В этот момент Вы уже можете отчленить 1 фотку, сделать с ней что-то, и потом остальные фотки - с ними также что-то сделать.
Если всё что выше успешно - удаляем папку по пути, который изначально получали из списка.
Если что-то пошло не так - значит просто возвращаем путь к папке в список (на втором круге попытаемся ещё раз пройти цепочку).
У Вас в этой логике какая-то проблема?
Просто не могу понять в какой именно момент наблюдается проблема при многопотоке...
Пример:
IZennoList list_dirs = project.Lists["dirs"]; // Список, привязан к файлу, содержит пути к всем папкам
List<string> list_images = new List<string>(); // Временный список, будет содержать пути к картинкам.
string dir_path = string.Empty;
lock(SyncObjects.ListSyncer){
if(list_dirs.Count > 0) {
dir_path = list_dirs.GetItem("0", true);// взяли с удалением путь к папке
}
}
if(string.IsNullOrEmpty(dir_path)) throw new Exception("Путь к папке не может быть пустым...");
string pattern = @"*.jpg";
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dir_path);
string[] files = dir.GetFiles(pattern, System.IO.SearchOption.AllDirectories).Select(f=>f.FullName).ToArray();
if(files.Length > 0) list_images.AddRange(files);
else throw new Exception("В папке нет картинок");
if(list_images.Count > 0) {
// делаем что-то с картинками - например берем первую с удалением.
// потом с остальными также что-то делаем
// если успех - удаляем папку
// если не успех - возвращаем путь в начальный список...
}
Нет, я не о том, что Вы что-то на диске удалять должны (возможно должны, но это уже другая история).
Я о том, что необходимо пути к папкам забросить в список.
А далее с этого списка брать строчки с удалением.
И вот уже в этот момент, когда мы взяли строчку с удалением - мы фактически находимся в 1 потоке.
В этот момент Вы уже можете отчленить 1 фотку, сделать с ней что-то, и потом остальные фотки - с ними также что-то сделать.
Если всё что выше успешно - удаляем папку по пути, который изначально получали из списка.
Если что-то пошло не так - значит просто возвращаем путь к папке в список (на втором круге попытаемся ещё раз пройти цепочку).
У Вас в этой логике какая-то проблема?
Просто не могу понять в какой именно момент наблюдается проблема при многопотоке...
Пример:
IZennoList list_dirs = project.Lists["dirs"]; // Список, привязан к файлу, содержит пути к всем папкам
List<string> list_images = new List<string>(); // Временный список, будет содержать пути к картинкам.
string dir_path = string.Empty;
lock(SyncObjects.ListSyncer){
if(list_dirs.Count > 0) {
dir_path = list_dirs.GetItem("0", true);// взяли с удалением путь к папке
}
}
if(string.IsNullOrEmpty(dir_path)) throw new Exception("Путь к папке не может быть пустым...");
string pattern = @"*.jpg";
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dir_path);
string[] files = dir.GetFiles(pattern, System.IO.SearchOption.AllDirectories).Select(f=>f.FullName).ToArray();
if(files.Length > 0) list_images.AddRange(files);
else throw new Exception("В папке нет картинок");
if(list_images.Count > 0) {
// делаем что-то с картинками - например берем первую с удалением.
// потом с остальными также что-то делаем
// если успех - удаляем папку
// если не успех - возвращаем путь в начальный список...
}
Нет, я не о том, что Вы что-то на диске удалять должны (возможно должны, но это уже другая история).
Я о том, что необходимо пути к папкам забросить в список.
А далее с этого списка брать строчки с удалением.
И вот уже в этот момент, когда мы взяли строчку с удалением - мы фактически находимся в 1 потоке.
В этот момент Вы уже можете отчленить 1 фотку, сделать с ней что-то, и потом остальные фотки - с ними также что-то сделать.
Если всё что выше успешно - удаляем папку по пути, который изначально получали из списка.
Если что-то пошло не так - значит просто возвращаем путь к папке в список (на втором круге попытаемся ещё раз пройти цепочку).
У Вас в этой логике какая-то проблема?
Просто не могу понять в какой именно момент наблюдается проблема при многопотоке...
Пример:
IZennoList list_dirs = project.Lists["dirs"]; // Список, привязан к файлу, содержит пути к всем папкам
List<string> list_images = new List<string>(); // Временный список, будет содержать пути к картинкам.
string dir_path = string.Empty;
lock(SyncObjects.ListSyncer){
if(list_dirs.Count > 0) {
dir_path = list_dirs.GetItem("0", true);// взяли с удалением путь к папке
}
}
if(string.IsNullOrEmpty(dir_path)) throw new Exception("Путь к папке не может быть пустым...");
string pattern = @"*.jpg";
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dir_path);
string[] files = dir.GetFiles(pattern, System.IO.SearchOption.AllDirectories).Select(f=>f.FullName).ToArray();
if(files.Length > 0) list_images.AddRange(files);
else throw new Exception("В папке нет картинок");
if(list_images.Count > 0) {
// делаем что-то с картинками - например берем первую с удалением.
// потом с остальными также что-то делаем
// если успех - удаляем папку
// если не успех - возвращаем путь в начальный список...
}
Хорошего дня.
Косяк может быть, когда список с путями к папкам не привязан к файлу - и тогда каждый поток работает с одинаковым набором данных (удаление из списка тогда влияет только на список именно для одного конкретного потока).
Если у Вас реализован алгоритм подобный тому, который я попытался описать - ошибки быть не должно.
Хорошего дня.
Косяк может быть, когда список с путями к папкам не привязан к файлу - и тогда каждый поток работает с одинаковым набором данных (удаление из списка тогда влияет только на список именно для одного конкретного потока).
Если у Вас реализован алгоритм подобный тому, который я попытался описать - ошибки быть не должно.
Файл-список с путями к папками сформируйте заранее в отдельном шаблоне, а не в этом же.
Так же проверьте, что отмечена настройка "Сохранять изменения списка в файл" в опциях списка.
Файл-список с путями к папками сформируйте заранее в отдельном шаблоне, а не в этом же.
Так же проверьте, что отмечена настройка "Сохранять изменения списка в файл" в опциях списка.
при работе с файлами, чтобы каждый поток не брал один и тот же файл, нужно выбранный файл куда-то перемещать или как-то переименовывать, что само по себе одно и тоже