次の方法で共有


コンポーネントのリソースの解放

更新 : 2007 年 11 月

カスタム クライアント コンポーネント (動作、コントロール、基本コンポーネントなど) の中には、コンポーネントを破棄する前にリソースの解放が必要になるものがあります。リソースを解放する必要がある場合は、Sys.Component.dispose メソッドをオーバーライドして、オーバーライドしたメソッドの中でリソースを解放できます。これにより、コンポーネントが破棄される直前に、リソースを確実に解放できます。コンポーネントは、その基本型に応じて、Sys.ComponentSys.UI.Behavior、または Sys.UI.Control の各基本クラスから、dispose メソッドを継承します。

コンポーネントの dispose メソッド内で、次の手順を実行します。

  • コンポーネントが使用したリソースを破棄またはリセットします。

  • コンポーネントが内部キューに配置したプロセスを停止し、コンポーネントのコンシューマが呼び出した機能を無効にします。

  • 基本クラスの dispose メソッドを呼び出します。

    Bb398784.alert_note(ja-jp,VS.90).gifメモ :

    コンポーネントが有効であることを示すパブリック プロパティを定義し、その set アクセサでプロパティ変更イベントを発生させるようにしておくと便利です。そのうえで、dispose メソッド内でこのプロパティを設定し、コンポーネントが無効になったことを示します。これにより、ページ作成者は、コンポーネントを利用できるかどうかを知ることができます。

次の例では、コンポーネントのクラスのプロトタイプで定義された dispose メソッドをオーバーライドする方法を示します。

dispose: function() {
    // Call set_enabled so the property-changed event is raised 
    //  in order to notify any attached listeners.
    this.set_enabled(false);

    // Stop any component processes so that 
    // they are not called after disposal.
    this._stopSimpleComponentProcesses();

    // Call the base dispose method.
    Samples.SimpleComponent.callBaseMethod(this, 'dispose');
}

この例のコンポーネントでは、enabled プロパティが定義されており、このプロパティは dispose メソッド内で false に設定されます。enabled プロパティの set アクセサ メソッドは、プロパティ変更イベントを発生させます。ページ作成者は、このイベントに処理を関連付けて、コンポーネントが使用できるかどうかを調べることができます。このコンポーネントでは、tick イベントを発生させる可能性のあるキュー内のプロセスを停止するプライベート メソッドである _stopSimpleComponentProcess も定義されています。このメソッドは、コンポーネントのコンシューマによって呼び出された機能も無効にします。最後に、継承された Type.callBaseMethod メソッドを呼び出すことにより、dispose 基本メソッドが呼び出されます。

Bb398784.alert_note(ja-jp,VS.90).gifメモ :

登録されたすべてのクラスは、callBaseMethod メソッドを継承します。詳細については、「Type.callBaseMethod メソッド」を参照してください。

参照

処理手順

カスタムの非ビジュアル クライアント コンポーネントの作成

概念

カスタム コンポーネント プロパティの定義と PropertyChanged イベントの発生