LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 186 187 188 189 190 191 192 193 194 ... 407
    Перейти на страницу:
    обеспечением параллелизма данных. Таким термином обозначается задача прохода по массиву или коллекции в параллельной манере с помощью метода Parallel.For() или Parallel.ForEach(). Предположим, что необходимо выполнить некоторые трудоемкие операции файлового ввода-вывода. В частности, требуется загрузить в память большое число файлов *.jpg, повернуть содержащиеся в них изображения и сохранить модифицированные данные изображений в новом месте.

    Задача будет решаться с использованием графического пользовательского интерфейса, так что вы увидите, как применять "анонимные делегаты", позволяющие вторичным потокам обновлять первичный поток пользовательского интерфейса.

    На заметку! При построении многопоточного приложения с графическим пользовательским интерфейсом вторичные потоки никогда не смогут напрямую обращаться к элементам управления пользовательского интерфейса. Причина в том, что элементы управления (кнопки, текстовые поля, метки, индикаторы хода работ и т.п.) привязаны к потоку, в котором они создавались. В следующем примере иллюстрируется один из способов обеспечения для вторичных потоков возможности получать доступ к элементам пользовательского интерфейса в безопасной к потокам манере. Во время рассмотрения ключевых слов async и await языка C# будет предложен более простой подход.

    В целях иллюстрации создайте приложение Windows Presentation Foundation (WPF) по имени DataParallelismWithForEach, выбрав шаблон WPF Арр (.NET Core). Чтобы создать проект и добавить его к решению с помощью командной строки, используйте следующие команды:

    dotnet new wpf -lang c# -n DataParallelismWithForEach

                   -o .DataParallelismWithForEach -f

    net5.0

    dotnet sln .Chapter15_AllProjects.sln add .DataParallelismWithForEach

    На заметку! Инфраструктура Windows Presentation Foundation (WPF) в текущей версии .NET Core предназначена только для Windows и будет подробно рассматриваться в главах 24-28. Если вы еще не работали с WPF, то здесь описано все, что необходимо для данного примера. Разработка приложений WPF ведется в среде Visual Studio Code, хотя никаких визуальных конструкторов там не предусмотрено. Чтобы получить больший опыт разработки приложений WPF, рекомендуется использовать Visual Studio 2019.

    Дважды щелкните на имени файла MainWindow.xaml в окне Solution Explorer и поместите в него показанное далее содержимое XAML:

    <Window x:Class="DataParallelismWithForEach.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:local="clr-namespace:DataParallelismWithForEach"

        mc:Ignorable="d"

        Title="Fun with TPL" Height="400" Width="800">

      <Grid>

        <Grid.RowDefinitions>

          <RowDefinition Height="Auto"/>

          <RowDefinition Height="*"/>

          <RowDefinition Height="Auto"/>

        </Grid.RowDefinitions>

        <Label Grid.Row="0" Grid.Column="0">

          Feel free to type here while the images are processed...

        </Label>

        <TextBox Grid.Row="1" Grid.Column="0"  Margin="10,10,10,10"/>

        <Grid Grid.Row="2" Grid.Column="0">

          <Grid.ColumnDefinitions>

            <ColumnDefinition Width="Auto"/>

            <ColumnDefinition Width="*"/>

            <ColumnDefinition Width="Auto"/>

          </Grid.ColumnDefinitions>

          <Button Name="cmdCancel" Grid.Row="0" Grid.Column="0"

                  Margin="10,10,0,10"

                  Click="cmdCancel_Click">

            Cancel

          </Button>

          <Button Name="cmdProcess" Grid.Row="0" Grid.Column="2"

                  Margin="0,10,10,10"

                  Click="cmdProcess_Click">

                  Click to Flip Your Images!

          </Button>

        </Grid>

      </Grid>

    </Window>

    И снова пока не следует задаваться вопросом о том, что означает приведенная разметка или как она работает; вскоре вам придется посвятить немало времени на исследование WPF. Графический пользовательский интерфейс приложения состоит из многострочной текстовой области TextBox и одной кнопки Button (по имени cmdProcess). Текстовая область предназначена для ввода данных во время выполнения работы в фоновом режиме, иллюстрируя тем самым неблокирующую природу параллельной задачи.

    В этом примере требуется дополнительный пакет NuGet (System.Drawing.Common). Чтобы добавить его в проект, введите следующую команду (целиком в одной строке) в окне командной строки (в каталоге, где находится файл решения) или в консоли диспетчера пакетов в Visual Studio:

    dotnet add DataParallelismWithForEach package System.Drawing.Common

    Дважды щелкнув на имени файла MainWindow.xaml.cs (может потребоваться развернуть узел MainWindow.xaml), добавьте в его начало представленные ниже операторы using:

    // Обеспечить доступ к перечисленным ниже пространствам имен!

    // (System.Threading.Tasks уже должно присутствовать благодаря

    // выбранному шаблону.)

    using System;

    using System.Drawing;

    using System.Threading.Tasks;

    using System.Threading;

    using System.Windows;

    using System.IO;

    На заметку! Вы должны обновить строку, передаваемую методу Directory.GetFiles(), чтобы в ней был указан конкретный путь к каталогу на вашей машине, который содержит файлы изображений. Для вашего удобства в каталог TestPictures включено несколько примеров изображений (поставляемых в составе операционной системы Windows).

    public 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>bindebugnet5.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));

          }

        }

      }

    }

    На заметку! В случае получения сообщения об ошибке, связанной с неоднозначностью имени Path между System.IO.Path и System.Windows.Shapes.Path, либо удалите оператор using для System.Windows.Shapes, либо добавьте System.IO к Path: System.IO.Path.Combine(...).

    Обратите внимание, что метод ProcessFiles() выполнит поворот изображения в каждом файле *.jpg из

    1 ... 186 187 188 189 190 191 192 193 194 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Борис Борис14 июнь 00:50 Колокола в России тем и отличались от западных что раскачиаали именно язык колокола,а не сам колокол! Авторы что-жертвы ЕГЭ? Не... Соединенные Штаты России 3 - Полина Ром
    2. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    3. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    Все комметарии
    Новинки бесплатной онлайн библиотеки