Я не использовал его для этой определенной цели, но я держал пари , ffmpeg может сделать это.
Делегат неизменяемый, что означает, что вы не можете его изменить. Любые методы, которые, кажется, меняют его, такие как «добавление» или «вычитание» из него, на самом деле возвращают новый делегат с изменениями.
Так что это не сработает:
a.Remove(b);
Но это:
a = a.Remove(b);
в условия вызова метода Remove, то есть.
Обратите внимание, что следующий синтаксис работает правильно:
a -= b;
Вот почему после вызова Remove вы все еще наблюдаете код, вызывающий делегат, который вы, казалось бы, удалили, вы все еще вызов исходной цепочки делегатов с присутствующим делегатом.
Некоторые другие точки
Дубликаты разрешены в вашем делегат, т.е. ваш делегат может есть что-то вроде [cbM1, cbM2, cbM2, cbM3]
Если у u есть группа методов [cbM1, cbM2, cbM3, cbM4, cbM5, cbM1, cbM2] и вы выполнить некоторую операцию вроде [cbM1, cbM2, cbM3, cbM4, cbM5, cbM1, cbM2] - [cbM1, cbM2] тогда вы получите [cbM1, cbM2, cbM3, cbM4, cbM5]
Если у вас есть [cbM1, cbM2, cbM3, cbM4, cbM5], и вы выполните некоторую операцию, например [cbM1, cbM2, cbM3, cbM4, cbM5] - [cbM1, cbM5] вы получите [cbM1, cbM2, cbM3, cbM4, cbM5]