2011-12-18 5 views
1

私はMonoDevelopのアドインを作成しようとしています。これは外部ツール(例えば、Jabberからの着信メッセージのソースの更新、プロジェクトのビルド、実行)からトリガーされます。マクロを見つけることができなかったので、私はIdeApp.CommandService.DispatchCommand()を通してそれらを呼び出すことによって "コマンド"を使用します。シングルアクションの場合、これは素晴らしいですが、いくつかのコマンドを連続して実行しようとすると同時に実行されます。 コマンドキューを実装するには、1つのコマンドが前回の完了を待っていますか?MonoDevelop:マクロまたは実行中のコマンドを順番に

答えて

0

DispatchCommandは同期ですが、実行されているコマンドの一部が非同期操作を開始し、コマンドがそれらの操作に対するハンドルを返す方法がありません。

これらの特定のコマンドについては、それらをコマンドとしてディスパッチせず、それらの操作を実行するために高水準APIを直接呼び出すことをお勧めします。たとえば、IdeApp.ProjectOperations.Buildは、WaitForCompletedメソッドを使用してブロックできるIAsyncOperationハンドルを返します。 IdeApp.Workspaceを使用すると、プロジェクトを開いたり、開いているプロジェクトのハンドルを取得したり、アクティブな構成を設定したりすることができます。

+0

答えはMichaelですが、たとえばVersionControlのコマンド(MonoDevelopインストールの一部)完了イベントでバインドする機能はありません。また、IdeApp.WorkspaceまたはIdeApp.Workbenchオブジェクトを介して到達することもできません。それらの実行を観察する既知の方法はありますか? ps:StatusBar(明らかに間違った方法です)でもメッセージを追跡しようとしましたが、いずれも成功しませんでした。 – Socratez

+0

VersionControlServiceのIAsyncOperationsに変換するバージョンコントロールコマンド、および/または何らかの種類のバージョンコントロールイベントの機能要求を提出することをお勧めします。今の場合、FileServiceまたはProjectオブジェクトからのファイル変更イベントを監視するのが最善の方法です。 –

+0

もう一度@mhutch! – Socratez

関連する問題