# 38 Уроки C# – Потоки, Thread, Invoke, Action, delegate, Parallel.Invoke
00:00 Введение в потоки • Объяснение темы видео: управление потоками, параллельные операции, инвоки, экшн, делегаты. • Упоминание о домашнем задании ученика Марка Мора, который создал загрузчик. 01:00 Запись потоков • Потоки записываются с помощью директивы `using System.Threading`. • Сравнение с библиотекой `Task`. 01:14 Асинхронные методы • Пример асинхронного метода с использованием `Task.Run`. • Различие между синхронными и асинхронными методами. 03:04 Пример с WinTweaker • Демонстрация работы WinTweaker в фоновом режиме. • Объяснение, как программа продолжает работу после закрытия окна. 05:01 Создание и запуск потоков • Создание нового потока с помощью `new Thread`. • Запуск потока с помощью `Thread.Start`. • Передача метода в поток. 07:00 Делегаты • Объяснение делегатов как ссылок на методы. • Примеры использования делегатов. • Критика примеров использования делегатов в интернете. 08:51Анонимные методы • Делегаты как анонимные методы. • Проблемы с объяснением делегатов в туториалах. • Пример с дверным звонком для иллюстрации использования делегатов. 10:08 Делегирование и анонимные методы • Делегирование позволяет обращаться к методам через делегатов. • Пример с тётей Динин иллюстрирует взаимодействие с делегатом. • Анонимные методы используются для делегирования задач. 11:08 Использование лямбда-операторов • Лямбда-операторы упрощают написание кода с делегатами. • В лямбда-операторе можно указать метод или даже изменить лейбл. • Задачи выполняются в отдельном потоке. 12:07 Создание потоков • Потоки необходимы для задач, требующих много ресурсов. • Новый поток создаётся без явного имени. • Использование background=true позволяет потоку продолжать работу даже при закрытии программы. 13:11 Приоритет потоков • Приоритет потока влияет на распределение ресурсов процессора. • Высокий приоритет выделяет больше ресурсов для выполнения потока. • Автор предпочитает не использовать высокий приоритет, считая, что это должно быть решением разработчика. 13:40 Заключение • Задачи в Vicker хорошо выполняются без использования background. • Знание о возможности перекладывания процессов или их упрощения полезно для разработчиков. 14:20 Введение в проблему • Обсуждение ресурсоёмких задач, которые лучше выполнять в фоновом режиме. • Упоминание о различиях между управляемым и неуправляемым кодом. • Пример с отладкой программы в режиме дебаг и проблемой с TopMost. 15:16 Различия между режимами отладки и релиза • В режиме дебаг код виден цветным и подчёркивается, в режиме релиза — серым и не выполняется. • Ошибка «недопустимая операция в нескольких потоках» при попытке доступа к элементу управления из другого потока. 16:14 Объяснение работы потоков • Объяснение работы основного потока в файле main.cs. • Различие между управляемым и машинным кодом: управляемый код управляется средой разработки, машинный — процессором и памятью. • Проблема при попытке изменить элемент управления из другого потока. 18:10 Лайфхак и его недостатки • Использование CheckHandleCrossThreadAccess для отключения перехвата вызовов в ошибочном потоке. • Недостатки лайфхака: сложности при отладке и возможность пропуска ошибок. 19:10 Использование Invoke • Объяснение работы Invoke с делегатами. • Пример использования лямбда-выражений и анонимных методов. • Управление вызовами в зависимости от потока. 20:08 Реализация с Action • Объяснение работы Action как делегата без параметров и возвращаемого значения. • Использование Invoke и Required для управления вызовами в зависимости от потока. • Пример реализации с лямбда-выражением и проверкой необходимости Invoke. 22:06 Проверка работы реализации • Запуск программы без проблем после применения реализации. • Подтверждение корректной работы элементов управления. 22:24 Упрощённое написание экшн • Можно сразу вызвать экшн без использования «если». • Делегат внутри экшн передаёт параметры. • Важно правильно оформить вызов экшн. 23:23 Метод Invoker • Метод Invoker выполняет код в управляемом коде через делегат. • Работает в потоке, которому принадлежит базовый дескриптор. • Различие между Invoker и BeginInvoke. 24:11 Параллельный вызов экшн • Параллельный вызов экшн позволяет быстро выполнять задачи. • Используется лямбда-выражение для создания делегатов. • Позволяет одновременно выполнять несколько задач. 26:16 Управление потоками • Управление потоками осуществляется через метод Invoker или экшн. • Пример создания потока с помощью лямбда-выражения. • Запуск потока без дополнительного управления. 27:15 Управляемый и неуправляемый код • Управляемый код управляется отладкой. • Неуправляемый код выполняется машиной. • В релиз-режиме не требуется дополнительных ухищрений.
00:00 Введение в потоки • Объяснение темы видео: управление потоками, параллельные операции, инвоки, экшн, делегаты. • Упоминание о домашнем задании ученика Марка Мора, который создал загрузчик. 01:00 Запись потоков • Потоки записываются с помощью директивы `using System.Threading`. • Сравнение с библиотекой `Task`. 01:14 Асинхронные методы • Пример асинхронного метода с использованием `Task.Run`. • Различие между синхронными и асинхронными методами. 03:04 Пример с WinTweaker • Демонстрация работы WinTweaker в фоновом режиме. • Объяснение, как программа продолжает работу после закрытия окна. 05:01 Создание и запуск потоков • Создание нового потока с помощью `new Thread`. • Запуск потока с помощью `Thread.Start`. • Передача метода в поток. 07:00 Делегаты • Объяснение делегатов как ссылок на методы. • Примеры использования делегатов. • Критика примеров использования делегатов в интернете. 08:51Анонимные методы • Делегаты как анонимные методы. • Проблемы с объяснением делегатов в туториалах. • Пример с дверным звонком для иллюстрации использования делегатов. 10:08 Делегирование и анонимные методы • Делегирование позволяет обращаться к методам через делегатов. • Пример с тётей Динин иллюстрирует взаимодействие с делегатом. • Анонимные методы используются для делегирования задач. 11:08 Использование лямбда-операторов • Лямбда-операторы упрощают написание кода с делегатами. • В лямбда-операторе можно указать метод или даже изменить лейбл. • Задачи выполняются в отдельном потоке. 12:07 Создание потоков • Потоки необходимы для задач, требующих много ресурсов. • Новый поток создаётся без явного имени. • Использование background=true позволяет потоку продолжать работу даже при закрытии программы. 13:11 Приоритет потоков • Приоритет потока влияет на распределение ресурсов процессора. • Высокий приоритет выделяет больше ресурсов для выполнения потока. • Автор предпочитает не использовать высокий приоритет, считая, что это должно быть решением разработчика. 13:40 Заключение • Задачи в Vicker хорошо выполняются без использования background. • Знание о возможности перекладывания процессов или их упрощения полезно для разработчиков. 14:20 Введение в проблему • Обсуждение ресурсоёмких задач, которые лучше выполнять в фоновом режиме. • Упоминание о различиях между управляемым и неуправляемым кодом. • Пример с отладкой программы в режиме дебаг и проблемой с TopMost. 15:16 Различия между режимами отладки и релиза • В режиме дебаг код виден цветным и подчёркивается, в режиме релиза — серым и не выполняется. • Ошибка «недопустимая операция в нескольких потоках» при попытке доступа к элементу управления из другого потока. 16:14 Объяснение работы потоков • Объяснение работы основного потока в файле main.cs. • Различие между управляемым и машинным кодом: управляемый код управляется средой разработки, машинный — процессором и памятью. • Проблема при попытке изменить элемент управления из другого потока. 18:10 Лайфхак и его недостатки • Использование CheckHandleCrossThreadAccess для отключения перехвата вызовов в ошибочном потоке. • Недостатки лайфхака: сложности при отладке и возможность пропуска ошибок. 19:10 Использование Invoke • Объяснение работы Invoke с делегатами. • Пример использования лямбда-выражений и анонимных методов. • Управление вызовами в зависимости от потока. 20:08 Реализация с Action • Объяснение работы Action как делегата без параметров и возвращаемого значения. • Использование Invoke и Required для управления вызовами в зависимости от потока. • Пример реализации с лямбда-выражением и проверкой необходимости Invoke. 22:06 Проверка работы реализации • Запуск программы без проблем после применения реализации. • Подтверждение корректной работы элементов управления. 22:24 Упрощённое написание экшн • Можно сразу вызвать экшн без использования «если». • Делегат внутри экшн передаёт параметры. • Важно правильно оформить вызов экшн. 23:23 Метод Invoker • Метод Invoker выполняет код в управляемом коде через делегат. • Работает в потоке, которому принадлежит базовый дескриптор. • Различие между Invoker и BeginInvoke. 24:11 Параллельный вызов экшн • Параллельный вызов экшн позволяет быстро выполнять задачи. • Используется лямбда-выражение для создания делегатов. • Позволяет одновременно выполнять несколько задач. 26:16 Управление потоками • Управление потоками осуществляется через метод Invoker или экшн. • Пример создания потока с помощью лямбда-выражения. • Запуск потока без дополнительного управления. 27:15 Управляемый и неуправляемый код • Управляемый код управляется отладкой. • Неуправляемый код выполняется машиной. • В релиз-режиме не требуется дополнительных ухищрений.
