Если открытие большого количества файлов из самой надстройки Visio является или становится нестабильным (проблема, с которой я также сталкивался), я рекомендую открывать и закрывать новый экземпляр Visio для каждого имеющегося у вас документа.
Один из способов сделать это, например, в Python - установить пакет pypiwin32
и запустить следующий скрипт:
import win32com.client
documentsToProcess = ["path/to/doc1", "path/to/doc2", "path/to/doc3"]
for path in documentsToProcess:
app = win32com.client.DispatchEx("Visio.Application") # Open new Visio instance
doc = app.Documents.Open(path) # Open your document (and hopefully blocks)
doc.Saved = true # For quiet exit
app.Quit()
Вы можете найти всю официальную документацию о функции Open и всех других объектах. и методы здесь .
Затем вы изменили бы свой код надстройки так, чтобы он просто ожидал открытия документа перед его обработкой, например:
private void ThisAddIn_Startup(object sender, System.EventArgs e) {
// We subscribe to the DocumentOpened/Created event
this.Application.DocumentOpened += Application_DocumentOpened;
}
private void Application_DocumentOpened(Document doc) {
// Process your document here.
// Do your work on your document here!
}
Обычно работа, которую вы должны выполнять над каждым документом, намного дольше, чем просто создание нового экземпляра Visio, поэтому это не должно вызывать проблем.
Возможно, вам нужно внести несколько изменений, чтобы гарантировать, чтоЭкземпляр Visio закрывается правильно, но это идея. Вы также можете принудительно убить процесс, если это необходимо, когда он застрянет.