Уроки C# - Потоки, Thread, Invoke, Action, delegate, Parallel.Invoke - C#

2019 ж. 6 Мам.
95 049 Рет қаралды

Донаты и на кофе ➜ t.me/win10tweaker/171
Эксклюзив для спонсоров ➜ / xpuct
Если недоступна спонсорка ➜
В этом видео Вы узнаете всё о потоках, а также, как решить проблему:
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления не из того потока, в котором он был создан (The calling thread cannot access this object because a different thread owns it).
Форум по C#:
win10tweaker.ru/forum/forum/%...
#Потоки #Thread #Многопоточность #Invoke #Action #delegate #Parallel.Invoke #СиSharp #СиШарп

Пікірлер
  • Отличное объяснение. По делегатам действительно нет ни одного нормального объяснения, только видел пример на коллекции (посчитать к примеру сумму элементов с доп фильтром допустим только четные и т.п.). Эти доп фильтры делать делегатами, и в основном коде вызывать нужный делегат. Но этот пример не живой, ведь вместо всего этого можно использовать лямбда-выражения или вообще LINQ. Другой пример, который встречал - это применение делагатов в обратных вызовах, но там опять же у нас есть события. Т.е. делегаты в чистом виде в нормальном коде не встретишь.

    @chokayes7830@chokayes78305 жыл бұрын
    • Вы когда-либо с Event-ами работали? Там делегаты очень применимы. Эдакое сюрное объяснение "с потолка", но когда случится что-то такое делать, оно само по идее в голову придёт, что нужен такой механизм. Так вот пример: Я -- создатель некоторого события "раздача плова в тарелочке с вилочкой" и я раздаю плов, а ко мне приходят люди за пловом в тарелочке и за вилочкой. Эти люди -- делегаты. И вот я раздаю весь такой, а что будет дальше с этим пловом и одноразовой посудой я класть хотел, а люди-то разные: один съест, другой сделает себе из тарелочки воображаемую шапочку, третий обмажется пловом, четвёртый пойдёт мастерить из него взрывчатку... Но твоя (моя т.е.) задача не меняется, я всего лишь раздаю это. А ещё более просто и реально -- это, собственно, о делегировании обязанностей в реальном мире. Например: Вы - интернет-магазин. Вы продаёте товары и Вы ведёте доставку курьерами. Вы формируете заказы к отправке, а куча курьеров их доставляют, но Вася на велосипеде, Петя общественным транспортом, Вова на машине, а Дима вообще рулит большой почтовой службой и выполняет авиа-перевозки. Третий пример: отправка 1 оповещения (новости) в разные соц-сети одной кнопкой. Вы указали, что на событие реагируют только делегаты, принимающие такой-то набор параметров, из которых состоит ваша новость, например (заголовок и содержание) и всё, море обработчиков может обрабатывать эти данные и заниматься их публикацией каждый в своей соц-сети. Издатель же новости в свою очередь лишён головной боли о том как же эту новость опубликовать везде. Он делегировал эту обязанность другим, и эти другие -- делегаты.

      @absamurai@absamurai4 жыл бұрын
    • @@absamurai про интернет-магазин прям из языка снял. Вот пример с рынком: тебе нужна малина? Ты идешь на рынок(к примеру) или в любое удобное место где её можно купить. Ты не идешь на огород и не обращаешься к владельцу производства потому что это неудобно. Так вот тетя Зина - это делегат.

      @bylabunskyy2227@bylabunskyy22274 жыл бұрын
    • Делегаты придумали именно для событийного программирования. Смысл в том что делегат может иметь множество ссылок на разнице методы (техника подписки и отписки на собитие, хотя в обёртке события самый обычный делегат). Главное что бы сигнатура подходила. + Лямбда выражение (тоже делегат предикат). Так то все делегаты уже придуманы свои пишешь если не знаешь системного. Такие как Action, Func, Predicat, и т.д. Урок хорош!)

      @pasha5760@pasha57604 жыл бұрын
    • @@absamurai Чел с WindowsForms не работал похоже, там все события на делегатах

      @indawl@indawl4 жыл бұрын
    • Мне приходилось использовать делегаты, чтобы обновлять значения в режиме реального времени в таблице datagridview в WinForm. Было клиент-северное приложение, на клиенте был запущен поток, который получал данные от сервера и заносил инфу в таблицу. Код обновления данных в таблице выполнялся внутри делегата, иначе возникла ошибка, точное описание не помню, но че то там с доступом. Ниже приведен упрощенный фрагмент кода, где использовался делегат. private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) // получить данные { while (client.Connected == true) // пока клиент подключен { lock (locker) // для синхронизации потоков { // получение и обработка данных this.Invoke(new MethodInvoker(delegate { // обновление данных в таблице })); } }; }

      @Usermage_@Usermage_3 жыл бұрын
  • Просмотрел все уроки. Всё понятно, кратко и по существу. Большое спасибо. Если есть возможность, сделай урок по проблематике защиты кода от дизасемблеров и вообще насколько вероятно сохранить алгоритм программы в секрете.

    @sergezaybo6572@sergezaybo65723 жыл бұрын
  • ХрисТ, ты даже не представляешь себе какой ты молодец. Тебя очень приятно слушать и многие вещи становятся понятнее, чем раньше. Знать и донести это две разные вещи и ты владеешь обоими.

    @PK-yd4ki@PK-yd4ki3 жыл бұрын
    • обойи вещи

      @gennadysmirnov5362@gennadysmirnov53623 жыл бұрын
    • @@gennadysmirnov5362 Что? Обои вещи, Чем? обоими вещами. Учи русский!!!

      @PK-yd4ki@PK-yd4ki3 жыл бұрын
  • Уроки бомбезные,и как только ты все это запоминаешь,мне бы твоё мастерство.Браво👍👍

    @mikkimorfin3@mikkimorfin34 жыл бұрын
  • Добрый день уважаемый. Спасибо за общение с Вами.

    @Kozeniuk@Kozeniuk5 жыл бұрын
  • Вот это объяснил))). Сколько видосов про потоки смотрел, этот прям с первого раза зашел. Прям все по человечески объяснил, на простом языке. Спасибо. С меня лайк и подписка

    @lega3893@lega38935 жыл бұрын
  • Какие же прекрасные уроки. Информация очень понятная, а видео очень приятно смотреть. Спасибо

    @JuzoPC@JuzoPCАй бұрын
  • Реально живое, человеческое объяснение. Спасибо автору за адекватный канал.

    @malygos1898@malygos18983 жыл бұрын
  • Тайны делегатов раскрыты. Ох сколько я их гуглил. За Parallel отдельное спасибо, это что-то с чем-то.

    @adamiyy@adamiyy5 жыл бұрын
  • Хорошо, что я нарвался на тебя почти в самом начале. Спасибо.

    @notn9380@notn93804 жыл бұрын
  • Очень круто, спасибо большое за эти уроки. Все очень доступно и понятно, что огромная редкость.

    @user-rw1cc7cz4e@user-rw1cc7cz4e5 жыл бұрын
  • Спасибо вам огромное !!! Вот уже миллион англоязычных туториалов посмотрела, но лучше вас еще нигде не объяснили, ни на каком языке !

    @Nick-wz6tz@Nick-wz6tz3 жыл бұрын
  • Спасибо автору за такую подачу материала! Очень круто, что объяснение идёт бегло, понятно и НЕ на задротском языке:)

    @ivan140600@ivan1406004 жыл бұрын
    • Про язык действительно ценно. Очень живо слушается.

      @lizastepantsova5230@lizastepantsova52303 жыл бұрын
    • Да-да-да))) ...Это очень важно: это не важно!!! Но у вас останется...

      @vladoss4643@vladoss46438 ай бұрын
  • Очень понятно объясняешь. Про if и else было все очень понятно. Спасибо!

    @cryptoeyt@cryptoeyt3 жыл бұрын
  • Учитель года :) Ты очень хорошо объясняешь! Спасибо, добрый человек :)

    @NoName-tk4ym@NoName-tk4ym Жыл бұрын
  • Обычно, подобные уроки ставлю на скорость воспроизведения х1.5 или х2. Тут я впервые захотел чуть понизить скорость подачи :) А в целом круто, четкий грамотно сформулированный поток инфы. Думаю это максимум, что можно уложить в 30 минут, так что за более подробным и вдумчивым перевариванием нужно идти читать документацию. Спасибо за труд!

    @tenzo3096tenzo@tenzo3096tenzo2 жыл бұрын
  • по-людски по-кайфу объясняешь, спасибо!

    @gennadysmirnov5362@gennadysmirnov53623 жыл бұрын
  • Очень грамотный подход! Очень доволен что нашел ваш канал! Подписка

    @user-fe2wn8kw7b@user-fe2wn8kw7b3 жыл бұрын
  • Большое спасибо, за Ваш труд. У Вас очень хорошо получается!

    @user-rg3ib3kj4j@user-rg3ib3kj4j3 жыл бұрын
  • Спасибо огромное за видео, очень помогло.

    @alita9896@alita98965 жыл бұрын
  • Это просто восхитительно !!! Можно мне такого препода ? А ? Сколько каналов перелопатил, никто так понятно и находчиво не объясняет, просто вау !

    @belov_dev@belov_dev3 жыл бұрын
  • Очень полезное видео - грамотно и доступным языком.

    @_BladeDen_@_BladeDen_2 жыл бұрын
  • Огромное спасибо! Очень понятно. Сразу понял как лучше сделать

    @user-bt8ob6du9b@user-bt8ob6du9b2 жыл бұрын
  • Отличное объяснение! Благодаря тебе у меня единственного в группе курсовая работа будет с потоками))

    @DushaNews@DushaNews3 жыл бұрын
  • как хорошо что ты на эту тему видео записал

    @lamax847@lamax8475 жыл бұрын
  • Спасибо, посмотрела сначала про async await, где все доступным языком разложено по полочкам

    @potuStoronka@potuStoronka4 жыл бұрын
  • Это было сильно! Спасибо!

    @romanrudman5102@romanrudman51024 жыл бұрын
  • 2 год работаю программистом C#, и понимаю что много чего еще не знаю. По опыту скажу, автор, ты просто красавчик, объясняешь как надо

    @ozarmehrodilov9698@ozarmehrodilov96984 жыл бұрын
    • Популярное заблуждение, что надо всё-всё знать. Надо знать достаточно :) НО - далеко не всё!

      @leonbishop7404@leonbishop74044 жыл бұрын
    • Второе популярное заблужнение, что чем дольше работаешь - тем профессиональнее становишься. Можно и 10 лет неправильно машину водить :-)

      @igorthelight@igorthelight4 жыл бұрын
  • Давно видео не выходило, надеюсь у вас всё хорошо. Был бы рад увидеть уроки по EF (core), либо что-нибудь другое связанное с бд. Спасибо!

    @user-cw9ev9dq4v@user-cw9ev9dq4v4 жыл бұрын
    • Очень занят пока. Будут новые видео ;) Много.

      @XpucT@XpucT4 жыл бұрын
  • Про делегаты приведу пример. Есть метод который вызывается для заполнения progressBar, и вот у нас где-то там в другом классе, в другом пространстве имен есть метод который считывает огромный файл, и для этого мы создадим делегат и передадим как параметр, чтоб увидеть прогресс выполнения/чтения файла. Для событий без делегатов не обойтись

    @ozarmehrodilov9698@ozarmehrodilov96984 жыл бұрын
  • О, христ, я не знал, что ты пилишь уроки). Давно откладывал многопоточку, после шилда так и не вернулся к ней, думаю это жирный намек)

    @walson4708@walson47085 жыл бұрын
  • Спасибо за видос. Теперь многое стало чуть яснее.

    @sergegreenband7699@sergegreenband7699 Жыл бұрын
  • Круто!!! Понятно, и без соплежуйства, спасибо!

    @dobrinyanicitich7514@dobrinyanicitich75144 жыл бұрын
  • Спасибо за урок, единственный урок после которого я понял как использовать Thread

    @Dorinar@Dorinar4 жыл бұрын
  • Очень доходчиво объясняешь, скобки правильно расставляешь, так лучше, чем в строку. Юмора как раз столько, сколько надо) Если возможно - уменьши область захвата видео до размера окна виртуалки, т.к. мелкие символы на 720P не видно нормально (Инет 3G, живу вдали от цивилизации)

    @MrOlezhandr@MrOlezhandr4 жыл бұрын
  • Спасибо большое! Но я хотел услышать про ТреэдПул)))

    @yz777zhumabayev6@yz777zhumabayev6 Жыл бұрын
  • Большое спасибо за Ваш труд. Привет из Болгарии ... 🙂

    @user-vx2kx6oe6l@user-vx2kx6oe6l2 жыл бұрын
  • Для меня самое простое объяснение делегата - ссылка на метод или список ссылок на группу методов. Нужны они для удобства, когда какое-то событие может вызывать различные методы, которые в свою очередь определяются в рантайме, а не на стадии компиляции. В зависимости от каких-то условий или действий пользователя мы можем вызвать тот или иной метод, а так же целый список методов, меняя его при необходимости. Написал все нужные методы, а потом просто тупо добавляешь на них ссылку в делегат или убирай из него. Может плюсы делегатов не особо очевидны, когда метод один и он либо вызывается событием, либо нет и третьего не дано. Но когда присутствует большая вариативность поведения, то делегаты могут очень помочь.

    @phat80@phat803 жыл бұрын
    • Да, абсолютно верно, наконец-то я тоже до этого допёр!) В данном видео не показана одна важная функция делегатов - это расширения списка методов делегата через простую операцию «+=». Это супер удобно при работе в рантайме

      @benjaminBTN@benjaminBTN11 ай бұрын
  • я тебя обожаю, умоляю делай еще видео

    @henryparker3593@henryparker35935 жыл бұрын
  • Потрясающе!

    @user-vh1ns6ke8n@user-vh1ns6ke8n3 жыл бұрын
  • Уроки просто топ. Спасибо

    @mishabadichel1618@mishabadichel16184 жыл бұрын
  • Спасибо за урок, покажи плиз как работать с EF 6(связи, работа с данными и т.п.)

    @YarikMud@YarikMud5 жыл бұрын
  • Ааааааа, ты лучший!!!!! Спасибо большое за видео)

    @coollife4606@coollife4606 Жыл бұрын
  • Очень хорошее видео, спасибо !

    @PastuhMedvedey@PastuhMedvedey2 жыл бұрын
  • Присоединяюсь ко всем словам благодарности. Спасибо за проделанную работу! Хочу дать обратную связь. (13:09) В строчку или в столбик записан код на экране не очень принципиально. Есть только одно пожелание. Увеличьте, пожалуйста, размер шрифта кода. Если смотреть с телефона, то почти ничего не видно. Спасибо!) PS. На 150% увеличении комфортно (15:35) 🙂

    @pavelpuchkov7422@pavelpuchkov74224 жыл бұрын
  • Большое Спасибо.

    @ivann3135@ivann31354 жыл бұрын
  • Классное видео, на тему потоков) Не могли бы снять как одновременно в потоках выполнять одну задачу?

    @xellan9495@xellan94954 жыл бұрын
  • К делегатам добавлю некоторое пояснение. Да делегат в простом варианте является конвертером члена класса "метод" в объект, что-бы с методом можно было обращаться как с любым другим объектом (перемеренные, поля, свойства, параметры и тд.). Делегаты из таких структур появились достаточно рано и стали базисом для последующего синтаксического сахара такие как анонимные методы (как мы собираемся обращаться к анонимному методу если у него нету имени), лямбда-выражения (немного функционального программирования из F# и Омега# в C# которые просто красиво написанные анонимные методы) и типы делегаты Action(0...P16) и Func(return,0...P16) (очень сильно упрощают жизнь если нужны всевозможные колбеэки и актуаторы и последнее это события (события и есть делегат только более красиво написанный, события можно и на чистых делегатах написать, толком разницы нету кроме красивости кода). А живой пример смотри на само слово делегат что в переводе на русский является представитель по типу торговых представителей (орифлеймы всякие), послы в посольствах государственных по нормальному это государственные представители и так далее. Если что-то как-то надо представлять каким либо образом это вот делегат. А так это выросло из шаблона проектирования который так и называется делегат (иногда как шаблон делегирования)

    @AnkeKatome@AnkeKatome2 жыл бұрын
  • Спасибо за видео! Отлично всё разъяснено в ролике. Планируете ли снимать ролики по алгоритмам, паттернам? Было бы здорово коснуться темы DI, IoC -контейнеров.

    @battleBoats@battleBoats4 жыл бұрын
    • Да, после ещё несколько тем в Windows Forms приступим к WPF сразу же на MVVM.

      @XpucT@XpucT4 жыл бұрын
  • По моему, необходимость делегатов хорошо объясняет паттерн "Стратегия". Пример такой: У тебя есть определённая стратегия работы. Например: строительство коттеджного посёлка. И у тебя есть проекты строительства домов, дома все похожие, отличаются только в мелочах. Одна из задач в каждом проекте - выкопать котлован под фундамент. Так вот, в каких-то случаях ты можешь загнать туда чернорабочих, и они выкопают (т.к. например, экскаватор туда не проедет). В другом случае на эту же задачу ты отправишь мини-экскаватор. В третьем случае ты отправишь мощный экскаватор с отбойником, (т.к. там к примеру, там находится особо крепкий грунт). Так и в программировании - у нас есть общий метод, с командами - выкопать фундамент, подготовить основание, сделать опалубку, залить фундамент и т.д. а какими методами ты будешь строить каждый конкретный дом - зависит от конкретной ситуации, которая задаётся в конкретном случае и с конкретными условиями.

    @ItMohican@ItMohican Жыл бұрын
  • Отлично объяснил. Спасибо.

    @user-yv3hu3tb2o@user-yv3hu3tb2o2 жыл бұрын
  • Вот по таким видео можно даже научится кодить. И смотреть интересно, и много полезной информации.

    @Ubuntu-op@Ubuntu-op Жыл бұрын
    • @XpucT@XpucT Жыл бұрын
  • Спасибо, перевел свой софт для сжатия игр во много поток, ускорил работу в 2-5 раз) Я еще использовал сплит списка строк, на мини списки по 3 элемента, чтобы обработка шла, в каждом потоке по 3 элемента, вместо всех элементов в одном потоке) Мозг лопнул, но по кайфу работает

    @SCEEF@SCEEF10 ай бұрын
  • Ты когда нибудь отдыхаешь? Спасибо тебе!

    @Pavluha161@Pavluha1615 жыл бұрын
  • Я постоянно не мог найти инфу по этому всему, пытался нарыть инфу из самых странных источников, но тут нашел это видео, и просто любовь с первого взгляда

    @vitalyryabchich257@vitalyryabchich2573 жыл бұрын
  • Вот спасибо, отлично объяснил.

    @user-ti1ly4sq2j@user-ti1ly4sq2j4 жыл бұрын
  • Спасибо, огромное. Такую сложную тему объяснить настолько доступно. Наконец я чувствую,что смогу пользоваться этими инструментами нормально.

    @DmitriyVasil@DmitriyVasil4 жыл бұрын
  • Аналогии автора просто 10 из 10.

    @darkcrusaderzxc@darkcrusaderzxc2 жыл бұрын
  • Самое понятное объяснение. Еще бы окошко студии немножко увеличить чтобы не приглядываться... На экране еще много свободного места)

    @joesatriani1388@joesatriani13883 жыл бұрын
  • Хорошее объяснение. Лайк с меня

    @user-no3rr2wk2g@user-no3rr2wk2g5 жыл бұрын
  • очень круто, многое понял! Осталось понять как сделать поток который бы выполнял задачи по записи и чтению файлов и передавал их в основной поток (привет из Unity и Monobehavior работающих в основном потоке)

    @ode2877@ode2877 Жыл бұрын
  • Наконец то!!! Наконец-то я поняла эти ***чие делегаты!!!!!!

    @user-nx8mc1qw6i@user-nx8mc1qw6i2 жыл бұрын
  • здравствуйте, можте снять создание телеграмм бота, только вместо async/await использовать Thread?

    @user-lv1le3oq6c@user-lv1le3oq6c8 ай бұрын
  • Мне понравилось объяснение про ружье и звонок)) А я когда проходил делегаты думал что если я не понимаю его применения на практике, то я че-то не так понял и вообще тупой)

    @user-nh1lp8xt4j@user-nh1lp8xt4j Жыл бұрын
  • Круто! Пошел переписывать свой проект ))

    @kostya1306@kostya1306 Жыл бұрын
  • Делегат - можно понимать как callback функцию. Строготипизированный колбек дает большую гибкость. Во в первых - он гарантирует, что переданная лямбда соответствует сигнатуре, во вторых - внутри своего метода он позволяет на основании своей сигнатуры писать корректный в плане типов код, что помогает не заниматься отладкой 8 часов, в третьих - не обязательно в метод передавать лямбду, хоть иногда это, безусловно, удобно. list.Sort((a, b) => a.Id.CompareTo(b.Id)) например можно заменить на list.Sort(Sort.ById). Делегаты очень широко используются в мире функционального программирования, да и в классическом ООП (например, паттерн шаблонный метод)

    @21POPOV@21POPOV4 жыл бұрын
  • Использовал делегат чтобы на одну кнопку вешать 2 метода(старт/стоп), т.е. кнопка вызывает делегат ,а дальше в методе к ему привязывается другой метод и второй клик по кнопке уже для совсем других действий. Может можно было реализовать проще, но это первое что в голову пришло)

    @user-pi3jc9ts3l@user-pi3jc9ts3l4 жыл бұрын
  • Спасибо тебе. Сделай пожалуйста шрифт по больше. На телефоне сложно смотреть.

    @olegalekseev325@olegalekseev3254 жыл бұрын
  • Можешь сделать урок по (Save / Load ) а так же про защиту сохранений ?

    @trumpdmitry2288@trumpdmitry22885 жыл бұрын
  • это просто лучшее объяснение !!!!!!!!!!!)))))

    @mikedastro2930@mikedastro2930 Жыл бұрын
  • По делегатам, строим аналогию с C++. Функцию нельзя напрямую передать в функцию в качестве параметра. Но можно передать указатель (адрес, "делегат") / Даже в C++ не рекомендуют, в настоящее время, использовать указатели на функцию, а использовать класс Functional - аналог лямбда выражений в C#.

    @woodlandfantomas2044@woodlandfantomas2044 Жыл бұрын
  • А есть ли в планах работа с ком объектами? Было бы здорово получить урок про ним. И что-то видосов новых нет). Очень ждём)))

    @lega3893@lega38934 жыл бұрын
  • спасибо , Дядь.

    @tree-service@tree-service3 жыл бұрын
  • спасибо большое!!!

    @tezlin6774@tezlin67744 жыл бұрын
  • Спасибо! выручил! пиши пожалуйста в столбец -проще понимать.... ну по крайне мере мне)))

    @DeXMask@DeXMask4 жыл бұрын
  • Как-то сжато, немного рвано, дёргано, но при этом класно получается ))

    @user-br2fr5tk5b@user-br2fr5tk5b4 жыл бұрын
  • Спасибо огромное за урок, очень классное объяснение. Насчёт написания кода, как по мне, то в строчку лучше, и понятнее. Ещё вопрос, есть ли урок работе с процессами, и сетевое программирование ?

    @Colibri_Rent@Colibri_Rent4 жыл бұрын
    • Будет позже 🤝

      @XpucT@XpucT4 жыл бұрын
  • Советую очень серьезно относится к этому уроку, так как сложно без делегатов и без асинхронной/многопоточной программировании

    @ozarmehrodilov9698@ozarmehrodilov96984 жыл бұрын
  • Красивее конечно в одну строку. А как на самом деле записывать не важно. Единственное может быть затруднительно понять код тем у кого опыта мало. Лично я всегда смотрю оба варианта, так лучше понимаешь код и как его сокращать =)

    @Blastpv@Blastpv2 жыл бұрын
  • Спасибо за видео! В одну строку мне кста больше код нравиться, если не очень длинная строка получается.

    @user-gl1ti5op4v@user-gl1ti5op4v2 жыл бұрын
  • Орнул на делегатах :D Будут еще видео? Было бы супер про wpf послушать от тебя и про патерны.

    @arthurmelitena5837@arthurmelitena58374 жыл бұрын
    • Весьма вероятно 👍

      @XpucT@XpucT4 жыл бұрын
  • Спасибо.

    @ivann3135@ivann31354 жыл бұрын
  • Спасибо

    @user-mn2po8ns2z@user-mn2po8ns2z3 жыл бұрын
  • Нихрена не понял, но то что мне надо было я сделал xD спасибо )

    @DiFiS@DiFiS3 жыл бұрын
  • Про делегаты. Предположим есть комната в которой нет ни окон ни дверей, задача в ней убраться: пропылесосить, протереть пыль. Для решения нужен тот кто уберет комнату и способ в эту комнату попасть. Представим что у нас есть Маша, Петя и Вася - все они могут убрать комнату. Теперь надо их в комнату как-то поместить, есть два варианта: 1) для каждого из них прорубить отдельный вход; 2) сделать ДВЕРЬ.

    @user-bw2qr6iz2c@user-bw2qr6iz2c4 жыл бұрын
    • Предположим, что Маша, Петя и Вася хотят покушать. Есть вариант каждому кушать из своей тарелки, а можно кушать просто с КАСТРЮЛИ. Нет, не годится. Жду новых примеров. Кстати, после выхода этого видео, спустя какое-то время нашёл применение делегату - доступ к контролу из класса. Это боль...

      @XpucT@XpucT4 жыл бұрын
    • @@XpucT Вопрос изначально был зачем? Ну он же вроде как для соплей) Ну типа есть 15 алгоритмов сортировки массива и какой-нибудь PrintTime() для подсчета времени работы каждого алгоритма. Мы делаем PrintTime(Action ... ) и норм, нет? Подобие функциональной обертки из плюсов.

      @user-bw2qr6iz2c@user-bw2qr6iz2c4 жыл бұрын
  • У меня есть бутылка и она закрытая. "Открытие крышки" - вот наш делегат!. Мы можем открыть эту бутылку нормальным способом, а можно - ложкой; можно зубами тоже (если они здоровые), некоторые могут и глазом.

    @Abo56Volo@Abo56Volo3 жыл бұрын
  • Когда следующий урок? Жду с нетерпением !!!

    @piloowar@piloowar3 жыл бұрын
    • Будут ;)

      @XpucT@XpucT3 жыл бұрын
  • делегат удобен тогда, когда тебе нужен список делегатов (то-есть у тебя есть методы 1,2,3,4,5,6,7) и ты хочешь их выполнять, у тебя есть список с этими методами типа хочу чтобы, выполнялись так 1,2,3,2,2,2,2,2,1,3,4,5 и ну это можно когда количество небольшое прописать вручную, а так существуют делегаты которые можно добавить в список и выполнять когда тебе нужно и в любой последовательности (станки чпу, сценарии какие-то)

    @JenyaHW@JenyaHW4 жыл бұрын
  • Из того что знаю я deligate нужен как атрибут метода. Такой метод не имеет тела и нужен он чтобы запомнить сигнатуру. Например () когда есть коллекция свойств с разными атрибутами и у нас есть метод который возвращает все свойства с одним атрибутом, все свойства с другим и так далее...В этому случае можно написать метод обертку в который передается параметром коллекция и делигативный метод, который проверяет свойство на причастность к атрибуту. И тогда у нас будет не N методов по все атрибутам, а только 2 : один делигат и метод этот делигат использующий. Конкретно в тредах делигат видимо используется для того чтобы передать сигнатуру метода.

    @Fonarickable@Fonarickable3 жыл бұрын
  • Живой пример использования делегатов. Вам нужно решить систему из 100 дифференциальных уравнений вида dy/dx =F(x, y1....y100). Правые части системы - функции F записываются как массив делегатов одинаковой сигнатуры. Но начинка внутри каждой функции - разная. Программа видит делегат и вызывает функцию нужного содержания с заданным набором аргументов. Это как указатель на функцию в С.

    @alexefremov4158@alexefremov41583 жыл бұрын
  • По поводу делегатов и директора как раз все понятно. Ты обращаешься именно не к человеку, а к тому, кто выполняет обязанности директора. Если директор в отпуске, за него ответит зам или секретарь, или хз кто. Тебе не важно, кто именно, какой именно человек, главное, чтобы он был уполномечен. А лямбда оператор - это всего лишь синтаксический сахар.

    @alekseymudla5374@alekseymudla53744 жыл бұрын
  • Обожаю c#, пользуюсь 2008 студией, потому что не люблю выкачивать тонны гигабайт и люблю легкие ide, уже тогда было столько фичей в нем. Тогда наверное он казался языком из будущего.

    @AndroidsReview@AndroidsReview4 жыл бұрын
  • Респект

    @diwoolly6293@diwoolly62935 жыл бұрын
  • Неплохое видео, хоть я уже и опытный разработчик, что-то для себя все-равно подчерпнул, однако не раскрыта суть как Action позволяет менять контрол, и в чем разница между вызовом через лямбду, action и MethodInvoker

    @magnumataredfox@magnumataredfox3 жыл бұрын
  • Спасибо за видео друг ! и Коту привет ! Вопрос . Запустить поток можно так: поток.Start(); а есть ли возможность остановить выполнение потока когда мне нужно ? или как "убить" поток в процессе работы программы ? Спасибо !

    @Standoffer614@Standoffer6144 жыл бұрын
    • поток.Suspend(); - останавливает поток. Всё остальное гуглттьс по "C# работа с потоками".

      @igorthelight@igorthelight4 жыл бұрын
  • По поводу делегатов, в основном используется другая их форма - события. Ну то есть события и есть делегаты, только более продвинутые. Ну уж я надеюсь, что никто не отрицает полезность событий)

    @Iamnotagenius@Iamnotagenius4 жыл бұрын
  • Делегаты нужны для того, чтобы различные функции в качестве аргументов передавать в другие функции, чтобы потом эти переданные в качестве аргументов функции вызывались когда угодно, идеальный пример - конвейер компонентов Middleware для Asp.Net Core. Если ошибаюсь, поправьте

    @abrikos_yadrony@abrikos_yadrony3 жыл бұрын
  • Скажите, для парсинга сайтов (получение страниц и извлечения из них данных) лучше использовать многопоточность или async?

    @user-ql2cz7hy1x@user-ql2cz7hy1x4 жыл бұрын
    • async сегодня в любом вопросе предпочтительнее.

      @XpucT@XpucT4 жыл бұрын
    • @@XpucT Спасибо!

      @user-ql2cz7hy1x@user-ql2cz7hy1x4 жыл бұрын
  • Делегат это грубоговоря ссылка на метод. Все событийная модель на нем построена.

    @alexandrsazanov9402@alexandrsazanov94023 жыл бұрын
  • Спасибо большое, все довольно понятно и доходчиво. Планируете ли в дальнейшем делать видеоурок по тому как сделать собственные события и привязку к ним свои какие то данные?

    @greensxn@greensxn5 жыл бұрын
KZhead