Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 290
- Предыдущая
- 290/642
- Следующая
Изменить размер шрифта:
290
В этом примере требуется дополнительный пакет NuGet (
System.Drawing.Commondotnet add DataParallelismWithForEach package System.Drawing.CommonДважды щелкнув на имени файла
MainWindow.xaml.csMainWindow.xamlusing// Обеспечить доступ к перечисленным ниже пространствам имен!// (System.Threading.Tasks уже должно присутствовать благодаря// выбранному шаблону.)using System;using System.Drawing;using System.Threading.Tasks;using System.Threading;using System.Windows;using System.IO;На заметку! Вы должны обновить строку, передаваемую методу
Directory.GetFiles()TestPicturespublic partial class MainWindow : Window{ public MainWindow() { InitializeComponent(); } private void cmdCancel_Click(object sender, EventArgs e) { // Код метода будет вскоре обновлен. } private void cmdProcess_Click(object sender, EventArgs e) { ProcessFiles(); this.Title = "Processing Complete"; } private void ProcessFiles() { // Загрузить все файлы *.jpg и создать новый каталог // для модифицированных данных. // Получить путь к каталогу с исполняемым файлом. // В режиме отладки VS 2019 текущим каталогом будет // <каталог npoeктa>\bin\debug\net5.0 - windows. // В случае VS Code или команды dotnet run текущим // каталогом будет <каталог проекта>. var basePath = Directory.GetCurrentDirectory(); var pictureDirectory = Path.Combine(basePath, "TestPictures"); var outputDirectory = Path.Combine(basePath, "ModifiedPictures"); // Удались любые существующие файлы. if (Directory.Exists(outputDirectory)) { Directory.Delete(outputDirectory, true); } Directory.CreateDirectory(outputDirectory); string[] files = Directory.GetFiles(pictureDirectory, "*.jpg", SearchOption.AllDirectories); // Обработать данные изображений в блокирующей манере. foreach (string currentFile in files) { string filename = System.IO.Path.GetFileName(currentFile); // Вывести идентификатор потока, обрабатывающего текущее изображение. this.Title = $"Processing {filename} on thread {Thread.CurrentThread.ManagedThreadId}"; using (Bitmap bitmap = new Bitmap(currentFile)) { bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone); bitmap.Save(System.IO.Path.Combine( outputDirectory, filename)); } } }}На заметку! В случае получения сообщения об ошибке, связанной с неоднозначностью имени
PathSystem.IO.PathSystem.Windows.Shapes.PathusingSystem.Windows.ShapesSystem.IOPathSystem.IO.Path.Combine(...).Обратите внимание, что метод
ProcessFiles()*.jpgЧтобы обрабатывать файлы на как можно большем количестве процессоров, текущий цикл
foreachParallel.ForEach()IEnumerable<T>filesAction<T>
290
- Предыдущая
- 290/642
- Следующая
Перейти на страницу:
