2012-03-09 20 views
2

我正在創建額外的線程來執行各種後臺操作。如果我在該工作線程中使用WPF,那麼我需要確保該線程的調度程序正常關閉以防止內存泄漏。是否還有其他使用Dispatcher的.NET組件?或者WPF是唯一使用它的.NET組件?哪些.NET組件使用Dispatcher?

回答

1

從您的問題的聲音中,您在後臺線程上創建Dispatcher而不是從主UI線程中捕獲和使用現有的線程。你爲什麼這麼做?您的後臺線程應該只使用現有的Dispatcher並允許UI線程處理清理。

+0

後臺線程通過使用WPF創建一個報告來設置一個可視化樹,然後將該可視化樹渲染爲位圖,然後將其保存到磁盤。我發現它正在泄漏內存,然後才發現WPF使用調度程序來處理內存管理。在退出線程之前添加一個Dispatcher.CurrentDispatcher.Run()並關閉它將消除內存泄漏。 想知道是否有任何其他領域,如WCF?,使用dispather,所以我需要也知道這是潛在的泄漏。 – 2012-03-10 09:12:32

+0

它實際上是一種服務,它具有許多基於調度和從數據庫獲取相關數據的方式生成的報告。所以沒有涉及主要的UI線程。 – 2012-03-10 09:14:10

1

調度程序在內部使用SynchronizationContext,它是一個傳統的類,用於Windows的跨線程操作。但「調度員」只與WPF有關。