с использованием С#, .Net Framework 4.5, VS 2012
Попробуйте использовать Parallel.Foreach
В результате появился некоторый пользовательский интерфейс и добавлен метод для кнопки (метод позволяет повернуть все изображения в папке и сохранить в другом месте)
private void ProcessFileParallel()
{
string[] files =
Directory.GetFiles(@"C:\Users\Public\Pictures\Sample Pictures",
"*.jpg", SearchOption.AllDirectories); //get source folder
string dirNew = @"C:\modifiedImages"; //new folder
Directory.CreateDirectory(dirNew); //create dir
//usage of parallel and lambda
Parallel.ForEach(files, currfiles =>
{
string fileName = Path.GetFileName(currfiles); //get cur name of file
//GC for Bitmap
//create new object of Bitmap
using (Bitmap bitmap = new Bitmap(currfiles))
{
bitmap.RotateFlip(RotateFlipType.Rotate180FlipX); //rotating
bitmap.Save(Path.Combine(dirNew, fileName)); //save as
//anonym delegate - used for safety access to UI elements from secondary thread
this.Invoke((Action)delegate
{
//caption name change for form
this.Text =
string.Format("Curr Thread {0}",
Thread.CurrentThread.ManagedThreadId);
}
);
}
}
);
}
это работает, но после завершения (когда все изображения повернуты и сохранены в новом месте, а пользовательский интерфейс получил сверху что-то вроде Curr Thread 11
) основной поток заблокирован - означает, что пользовательский интерфейс не активен - ничего не может сделать. Вопрос. Как я могу разблокировать элементы пользовательского интерфейса?