2014-01-27 57 views
0

我使用com interop從vb6應用程序調用.net 4.0 dll。在.net中,我通過一個xaml固定文檔創建一個xps文檔並將其保存到磁盤。這導致和內存泄漏,我在這裏找到了一個很好的解決方案。調度員xps內存泄漏

Saving a FixedDocument to an XPS file causes memory leak

上面的解決方案,爲我工作,涉及到這行代碼:

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle, new DispatcherOperationCallback(delegate { return null; }), null); 

正好與這行代碼發生什麼。那是通過將委託設置爲null來處理Dispatcher對象?

回答

1

雖然最初看起來提供的代碼什麼都不做,但它實際上有一個非明顯的副作用,即解決您的問題。讓我們分解成幾個步驟:

  • Dispatcher.CurrentDispatcher獲取當前線程的調度程序。
  • Invoke同步執行調度的線程所提供的委託(目前1)
  • DispatcherPriority.SystemIdle將執行優先級
  • new DispatcherOperationCallback(delegate { return null; })創建一個委託,什麼也不做
  • null作爲參數傳遞給委託傳遞

總而言之,這看起來像什麼也沒做,事實上它確實沒有「沒有」。重要的部分是,它會一直等到當前線程的調度程序在執行「無」之前已清除比SystemIdle更高優先級的任何計劃任務。這樣可以在返回到vb6應用程序之前執行預定的清理工作。

+0

謝謝。很高興知道清理運行! –