MonoDevelop: макросы или команды запускаются последовательно - PullRequest
1 голос
/ 18 декабря 2011

Я пытаюсь создать надстройку для MonoDevelop, которая будет запускать команды, запускаемые из внешних инструментов (например: обновление источника, создание и запуск проекта на входящем сообщении из Jabber). Поскольку я не мог найти макросы, я использую «команды», вызывая их через IdeApp.CommandService.DispatchCommand (). Для одного действия это прекрасно работает, но когда я пытаюсь запустить несколько команд последовательно, они выполняются одновременно. Итак, как реализовать очередь команд, где одна команда ожидает завершения предыдущей?

1 Ответ

0 голосов
/ 19 декабря 2011

DispatchCommand является синхронным, однако некоторые из выполняемых им команд могут запускать асинхронные операции, и у команд нет способа вернуть дескриптор этих операций.

Для этих конкретных команд я бы рекомендовал не отправлять их как команды, а вместо этого напрямую вызывать API-интерфейсы высокого уровня для выполнения этих операций. Например, IdeApp.ProjectOperations.Build возвращает дескриптор IAsyncOperation, который можно заблокировать с помощью его метода WaitForCompleted. Вы можете использовать IdeApp.Workspace для открытия проектов и получения указателей на открытые проекты, установки активной конфигурации и т. Д.

...