Я занимаюсь COM-взаимодействием с Excel и другим программным обеспечением Office Automation.
Сотрудник упомянул мне, что мне нужно подождать, пока эти серверы автоматизации будут готовы после подачи им команды.
Однако я не вижу цели этого, так как не все вызовы блокируются, пока сервер автоматизации не выполнит заданную задачу?
Например, я обычно пишу:
Dim o as AutomationObject = AutomationServer.CreateObject(x, y, z)
o.Property ' could throw COM exception!!????
Мой коллега говорит, что мне нужно поспать после этого вызова, потому что сервер автоматизации еще может работать над созданием и инициализацией объекта.
Dim o as AutomationObject = AutomationServer.CreateObject(x, y, z)
Threading.Sleep(5000) ' wait for AutomationServer to "become ready"
o.Property ' could still throw COM exception!!????
Проблема, с которой я сталкиваюсь, заключается в том, что вызовы AutomationServer должны блокироваться до тех пор, пока AutomationServer не завершит или не завершит то, над чем он работал, или, по крайней мере, это должна быть проверка цикла, если «o» - ничто, но это не имеет смысла. потому что, как только вызов вернется, все готово!
У меня вопрос: есть ли какая-либо польза от сна после вызова AutomationServer? Есть ли способ «подождать», пока AutomationServer не завершит работу (если он фактически не блокируется)?