© 2012 Autodesk
アイドリング イベント
§モードレスダイアログなど非同期処理と対話
§イベント発生の制御
§既定値モード:アイドリング時にイベント通知は一回
§前回と同じ振る舞いの場合は SetRaiseWithoutDelayを呼ぶ必要あり
§アクティブドキュメント無し状態でもアイドリングイベントModelessForm_IdlingEvent SDK サンプル
§
モードレスダイアログなど非同期の処理を実装する方法ですが、まづ重要なことですが、Revit APIはその有効な実行コンテキス内でしか使用できません。このコンテキストは常にRevitによって提供されます。それはRevitがアドインのメソッドコールする時です。例えばアドインと作成した外部コマンドの場合は、Executeメソッドをもつインターフェースの実装が必要です。Revitは外部コマンドを実行する時にこのExecuteメソッドを呼びます、このメソッドが呼ばれた時にアドイン初めてRevit APIを使用する権限をもちます。そしてExecuteメソッドからリターンするまでRevit APIを使用できます。Executeメソッドからリターン後はRevit APIを使用することは許されません。

アドインが実装する外部アプリケーションでも同様です。起動時と終了時に呼ばれるインターフェースのメソッド内のコンテキストではRevit APIの使用をすることができます。これらのメソッドからのリターン後はRevit APIは使用できません。以前より多くのアドイン開発者の方々からRevitでモードレスの処理を実装したいとリクエストをいただいていました。例えば、ユーザがUIでRevit モデルに作業していると同時にモードレスダイアログでなにかしらのインターアクションを提供したいなどです。そのために、Revit 2012ではアイドリングイベントを公開ししアドインの為にモードレスダイアログなど非同期処理の実装を可能するためのRevit API使用できる実行コンテキストを提供いたしました。アイドリングイベントは例えばコマンドが実行されていない間などは継続的の発生ます。そしてこのタイミングでモードレスのクライアントを処理をイベントハンドラに置いて実行することができました。これによりRevitへの非同期のAPIアクセスを提供することができました。

しかし、これはパフォーマンス低下につながる問題を引き起こす傾向がありした。そのために、今回改善がされました。Revit2013では、イベントの規定値振る舞いが2012とは異なって実装されました。規定値の振る舞いではRevitがアイドリング状態に入るとアイドリングイベントは一度しか発生しません。例えばコマンドが終了するとイベントハンドラは一度しかコールバックを受けません。Revit2012では繰り返しよばれていました。場合によっては一秒かんに何千回もです。これがパフォーマンス低下を引き起こしていました。もし、以前のように繰り返しアイドリング時にイベントコールバックを受けたい場合はコールバック関数でSetRaiseWithoutDelay関数を呼ぶことができます。もう一つのアイドリングイベントの変更はドキュメントが存在しない場合もイベントが発生するようになりました。このアイドリングイベントについてはModelessForm_IdlingEvent SDK サンプルで利用方法をご紹介しています。