Нет, я не о том, что Вы что-то на диске удалять должны (возможно должны, но это уже другая история).
Я о том, что необходимо пути к папкам забросить в список.
А далее с этого списка брать строчки с удалением.
И вот уже в этот момент, когда мы взяли строчку с удалением - мы фактически находимся в 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) {
// делаем что-то с картинками - например берем первую с удалением.
// потом с остальными также что-то делаем
// если успех - удаляем папку
// если не успех - возвращаем путь в начальный список...
}