50

Web サーバーから取得した情報を表示する UserControl 派生コントロールがあります。現在、応答性を向上させるために、コントロールの初期化を非同期にする作業を行っています。

Load イベント ハンドラーで、CancellationTokenSource を作成し、関連するトークンをさまざまな非同期呼び出しで使用しています。

非同期操作が完了する前にユーザーがフォームを閉じると、操作がキャンセルされるようにしたいと思います。つまり、トークンで Cancel を呼び出したいのです。

私はこれをどこで行うかを理解しようとしています。トラップできる Unload イベントがあれば完璧ですが、そうではありません。実際、適切と思われるイベントが見つかりません。

含まれている Form の close イベントをトラップすることはできましたが、すべてを UserControl のローカルに保持したかったのです。

提案?

4

4 に答える 4

48

Control::HandleDestroyedイベントをお勧めします。基になる HWnd が破棄されたときに発生します (これは通常、親フォームが閉じられたときに発生します)。独自の UserControl で処理するには、OnHandleDestroyedをオーバーライドする必要があります。

コントロールはまだ破棄されていないため、現時点ではコントロールのプロパティに完全にアクセスできます。

于 2012-09-18T10:08:20.960 に答える
2

Disposedイベントを使ってみませんか?

フォームが閉じられると、フォームはDisposeそれ自体を呼び出し、すべての子コントロールも再帰的に破棄されます。

于 2012-09-18T09:57:35.507 に答える
1

これを試して:

UserControl.Dispose();
于 2012-09-18T10:41:55.493 に答える