0

以下のコードが原因で、この場合の ChildWindow Login が GC によって収集されないことを確認したいだけです。サンプルを明確にするために、これは他のすべてのページによって継承される Silverlight ページからのものであるため、仮想 void pageloaded メソッドです。

public class MyPage : Page
{
    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        _user = App.AuthenticatedUser;
        if (!_user.IsValid)
        {
            Login loginWindow = new Login(_user);
            loginWindow.Closed += new EventHandler(PageLoaded);
            loginWindow.Show();
        }
        else
            PageLoaded(this, e);
    }

    //to be overridden by the pages extending this page control
    protected virtual void PageLoaded(object sender, EventArgs e) { }

ご協力いただきありがとうございます。

4

1 に答える 1

0

これで問題ありません。loginWindows の Close イベントはハンドラーを認識しており、その逆ではありません。そのため、フォームには GC がそれを取得するのを妨げる関係はありません。

イベントが定義されているオブジェクトがアプリケーション内で長期間存続する場合 (およびイベント ハンドラーの関連付けを同じ期間存続させたくない場合) は、イベント ハンドラーの登録解除が重要になります。

于 2012-04-10T20:17:44.723 に答える