Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 285 286 287 288 289 290 291 292 293 ... 642
Перейти на страницу:

Хотя можно было бы вызывать методы Parallel.For() и Parallel.ForEach() и передавать им строго типизированный объект делегата Func&lt;T&gt; или Action&lt;T&gt;, задача программирования упрощается за счет использования подходящих анонимных методов или лямбда-выражений С#.

Обеспечение параллелизма данных с помощью класса Parallel

Первое применение библиотеки TPL связано с обеспечением параллелизма данных. Таким термином обозначается задача прохода по массиву или коллекции в параллельной манере с помощью метода 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:

&lt;Window x:Class=&quot;DataParallelismWithForEach.MainWindow&quot;

    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;

    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;

    xmlns:local=&quot;clr-namespace:DataParallelismWithForEach&quot;

    mc:Ignorable=&quot;d&quot;

    Title=&quot;Fun with TPL&quot; Height=&quot;400&quot; Width=&quot;800&quot;&gt;

  &lt;Grid&gt;

    &lt;Grid.RowDefinitions&gt;

      &lt;RowDefinition Height=&quot;Auto&quot;/&gt;

      &lt;RowDefinition Height=&quot;*&quot;/&gt;

      &lt;RowDefinition Height=&quot;Auto&quot;/&gt;

    &lt;/Grid.RowDefinitions&gt;

    &lt;Label Grid.Row=&quot;0&quot; Grid.Column=&quot;0&quot;&gt;

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

    &lt;/Label&gt;

    &lt;TextBox Grid.Row=&quot;1&quot; Grid.Column=&quot;0&quot;  Margin=&quot;10,10,10,10&quot;/&gt;

    &lt;Grid Grid.Row=&quot;2&quot; Grid.Column=&quot;0&quot;&gt;

      &lt;Grid.ColumnDefinitions&gt;

        &lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;

        &lt;ColumnDefinition Width=&quot;*&quot;/&gt;

        &lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;

      &lt;/Grid.ColumnDefinitions&gt;

      &lt;Button Name=&quot;cmdCancel&quot; Grid.Row=&quot;0&quot; Grid.Column=&quot;0&quot;

              Margin=&quot;10,10,0,10&quot;

              Click=&quot;cmdCancel_Click&quot;&gt;

        Cancel

      &lt;/Button&gt;

      &lt;Button Name=&quot;cmdProcess&quot; Grid.Row=&quot;0&quot; Grid.Column=&quot;2&quot;

              Margin=&quot;0,10,10,10&quot;

              Click=&quot;cmdProcess_Click&quot;&gt;

              Click to Flip Your Images!

      &lt;/Button&gt;

    &lt;/Grid&gt;

  &lt;/Grid&gt;

&lt;/Window&gt;

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

1 ... 285 286 287 288 289 290 291 292 293 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга