Macros MonoDevelop:宏或按顺序运行命令

Macros MonoDevelop:宏或按顺序运行命令,macros,command,add-in,monodevelop,Macros,Command,Add In,Monodevelop,我正在尝试为MonoDevelop创建一个外接程序,它将运行由外部工具触发的命令(例如:根据Jabber传入的消息更新源代码、构建和运行项目)。由于找不到宏,我使用“命令”,通过IdeApp.CommandService.DispatchCommand()调用它们。对于单个操作,这非常有效,但当我尝试按顺序运行多个命令时,它们会同时执行。 那么,如何实现命令队列,其中一个命令等待上一个命令的完成?DispatchCommand是同步的,但是它运行的一些命令可能会启动异步操作,并且这些命令无法返回

我正在尝试为MonoDevelop创建一个外接程序,它将运行由外部工具触发的命令(例如:根据Jabber传入的消息更新源代码、构建和运行项目)。由于找不到宏,我使用“命令”,通过IdeApp.CommandService.DispatchCommand()调用它们。对于单个操作,这非常有效,但当我尝试按顺序运行多个命令时,它们会同时执行。
那么,如何实现命令队列,其中一个命令等待上一个命令的完成?

DispatchCommand是同步的,但是它运行的一些命令可能会启动异步操作,并且这些命令无法返回这些操作的句柄


对于那些特定的命令,我建议您不要将它们作为命令分派,而是直接调用高级API来执行这些操作。例如,IdeApp.ProjectOperations.Build返回一个IAsyncOperation句柄,您可以使用其WaitForCompleted方法阻止该句柄。您可以使用IdeApp.Workspace打开项目,获取已打开项目的句柄,设置活动配置等。

感谢Michael的回答,但例如VersionControl的命令(属于MonoDevelop安装的一部分)异步运行,无法绑定完成事件。也无法通过IdeApp.Workspace或IdeApp.Workbench对象访问。是否有任何已知的方法来观察它们的执行情况?ps:我甚至尝试在StatusBar上跟踪消息(这显然是一种错误的方式),但也没有成功。我建议您提交一个功能请求,以便将版本控制命令转换为VersionControlService上的IAsyncOperations,和/或某些版本控制事件。目前,最好的办法是观察来自文件服务或项目对象的文件更改事件。