EndInvoke () - необязательно или нет? - PullRequest
5 голосов
/ 29 октября 2009

Асинхронный вопрос:

Я читал в Интернете МНОГО статей за и против Delegate.EndInvoke (), необязательно. Большинству из этих статей 4-5 лет. Много мертвых ссылок.

Может кто-нибудь объяснить, в .NET 2.0 - действительно ли EndInvoke () действительно предотвращает неизбежную в противном случае утечку памяти, и если да, укажите, пожалуйста, что является причиной этой утечки?

По той же теме: если EndInvoke () действительно необходим - я нахожу лучший способ реализовать механизм Fire-and-Forgot, используя метод обратного вызова, который запускает EndInvoke (). Я хотел бы услышать от любого, кто думает иначе.

Спасибо, O

Ответы [ 2 ]

8 голосов
/ 29 октября 2009

Для Delegate.EndInvoke, вы должны позвонить. Для Control.EndInvoke команда WinForms сказала, что вам не нужно звонить. Я не знаю об аналоге для WPF, но я думаю, что это хорошая идея, если у вас нет действительно веских причин полагать, что вам не нужно.

У меня есть некоторый код "запускай и забывай" для делегатов в моей статье о потоке - примерно на полпути (поиск "огонь").

5 голосов
/ 29 октября 2009

Из MSDN :

Всегда вызывайте EndInvoke, чтобы завершить асинхронный вызов.

Я советую вам следовать рекомендациям, даже если сегодня это работает без утечек, завтра оно может измениться.

...