1

WPF と UserControl を使用してコーディングされたアプリケーションがあります。プログラムの起動時に読み込まれるユーザー コントロール タブと一緒に親ウィンドウをリンクしました。

そこから、対応する UserControl を開くタブを選択できます。一部の UserControls にはスレッドを持つバックグラウンド ワーカーがあり、一部は純粋にデータのキャプチャに使用され、その他はデータ出力またはレポートの生成に使用されます。各タブが呼び出されたクラスを使用して閉じClossableItemsられると、閉じるボタンを選択したり、MainWindow にタブを表示したりできます。

私たちが直面している問題は、UserControl が閉じられたときに、リソースがシステムに解放されないことです。バックグラウンド ワーカーと、UserControl を表示するために必要なリソース。UserControl を強制的に閉じる方法をグーグル検索しましたが、役に立ちませんでした。私が試したこと:

Background worker:
bwDataCollector.WorkerSupportsCancellation = true;
bwDataCollector.CancellationPending;
bwDataCollector.CancelAsync();


User Control:
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted
private void Dispatcher_ShutdownStarted(object sender, EventArgs e)
        {
        }

基本的に、リソースも解放する onDestroy などのメソッドから呼び出されたこの UserControls を閉じる方法を知っている場合、私は何を求めていますか?

また、この同じ方法を使用してバックグラウンドのワーカーをシャットダウンする方法はありますか?

4

1 に答える 1

0

バックグラウンド ワーカーに停止するように通知する必要があり、バックグラウンド ワーカーはそのシグナルを確実に処理する必要があります。シグナリングはさまざまなパターンを使用して実装できますが、最も単純なものは次のとおりです。

という名前のメソッドを含む基本的なコントロールからすべてのユーザー コントロールを派生させます (またはそれらにインターフェイスを実装させます) CloseControl。メソッドで、CloseControlバックグラウンド ワーカーに停止するように通知するフラグを設定します。

ユーザー コントロールを含むウィンドウを閉じる前に、CloseControlそれぞれのメソッドを呼び出します。

于 2013-01-09T14:59:22.517 に答える