2009-10-29 60 views
5

一個異步問題:EndInvoke() - 可選還是不可以?

我一直在閱讀互聯網上的很多文章贊成和反對Delegate.EndInvoke()是可選的。大多數這些文章是4-5歲。很多死鏈接。

誰能解釋,在.NET 2.0 - 是的EndInvoke()確實防止否則,必然內存泄漏,如果是你能請註明什麼原因導致這種泄漏?

就同一議題:如果EndInvoke會()確實是一個必須的 - 我覺得實現使用運行的EndInvoke()的回調方法發射後不管機制的最佳途徑。我很樂意聽到任何人的看法。

感謝, Ø

回答

8

Delegate.EndInvoke,你應該調用它。對於Control.EndInvoke,WinForms團隊曾表示,您需要調用而不是。我不知道WPF的等價物,但我認爲這樣做是個不錯的主意,除非你有足夠的理由相信你不需要。

我有一些「射後不理」在我threading article爲代表的代碼 - 大約一半時(搜索「火」)。

+0

fire-n-forget是什麼意思?我假設:1)如果你做了一個BeginInvoke並且既不使用輪詢,也不使用輪詢,等待句柄或者回調,那麼它是一個非常火的方法。2)只有void return方法可以用於fire-n-forget,所以你不需要在執行BeginInvoke之後,擔心使用上述三個之一。我認爲,如果你建議使用回調來避免內存泄漏,那麼它就不會再被遺忘了。 – 2009-10-30 04:14:15

+0

這正是我的問題。如果指南總是使用EndInvoke(),那麼就沒有選項可以繼續使用。有點奇怪。 – tsemer 2009-11-02 12:47:22

5

msdn

總是調用EndInvoke來完成你的 異步調用。

我建議你遵循指導原則,即使今天沒有泄漏,它可能會在明天改變。

相關問題