2012-03-09 10 views
2

私はさまざまなバックグラウンドアクションを実行するために余分なスレッドを作成しています。そのワーカースレッド内でWPFを使用する場合、そのスレッドのディスパッチャがメモリリークを防ぐために正常にシャットダウンされるようにする必要があります。 Dispatcherを使用する他の.NETコンポーネントはありますか?または、WPFはそれを使用する唯一の.NETコンポーネントですか?どの.NETコンポーネントがディスパッチャを使用していますか?

答えて

1

あなたの質問の音から、メインのUIスレッドから既存のスレッドをキャプチャして使用するのではなく、バックグラウンドスレッドにDispatcherを作成しています。あなたはなぜこれをやっているのですか?あなたのバックグラウンドスレッドは、既存のDispatcherを使用するだけで、UIスレッドがそのクリーンアップを処理できるようにする必要があります。

+0

背景スレッドは、WPFを使用してビジュアルツリーを設定し、そのビジュアルツリーをビットマップにレンダリングしてレポートを作成し、ディスクに保存します。私はそれがメモリをリークしていたことがわかり、WPFがディスパッチャを使用してメモリ管理を処理していることが判明しました。スレッドを終了する前にDispatcher.CurrentDispatcher.Run()を追加してシャットダウンすると、メモリリークが削除されます。 WCFなどの他の領域があるかどうか疑問に思っています。ディスパーザを使用しているため、潜在的なリークとして認識する必要があります。 –

+0

実際には、スケジューリングとデータベースから関連データを取得することに基づいて、このようにして生成された多くのレポートを持つサービスです。したがって、メインのUIスレッドは必要ありません。 –

1

Dispatcherは、従来のクラスであるSynchronizationContextを内部的に使用し、クロススレッド操作のためにWindowsで使用されます。しかし、 "Dispatcher"はWPFにのみ関連しています。

関連する問題