2013-01-18 4 views
0

Я реплицируется этот вопрос как в Project 2010 и 2013 годахMS Project VSTO: Закрытие MS Project приводит к зависанию indefinetely

Я разработал надстройку VSTO, с помощью Visual Studio 2010. В этой надстройке, я выставил Метод COMVisible.

У меня также есть другое (не .NET) приложение, которое затем создает экземпляр объекта COM проекта, выполняет поиск моего добавления и вызывает метод, который я обозначил как COMVisible.

Это заставляет проект открывать «новый» файл проекта и что-то писать ему.

Это приложение не-.NET после вызова метода COM в моем добавлении прекращает выполнение (без закрытия MS Project).

Затем я закрываю вновь созданный проект (а не проект MS, только файл). Все отлично; однако, когда я пытаюсь закрыть MS Project, он зависает бесконечно. В Диспетчере задач он по-прежнему отображается как «Запуск», и щелчок по окну MS Project вызывает диалог «Переключиться на», «Повторить», «Отмена», информируя меня о том, что какое-то другое приложение занято ...

Удивительно, но если я решил НЕ закрыть недавно созданный файл проекта и просто закрыть окно MS Project, он закрывается нормально.

Что может быть здесь?

ответ

0

Хорошо, после большого расследования я нашел ответ на проблему. В принципе, класс COM, открытый из моего VSTO Addin, должен наследовать «StandardOleMarshalObject».

Причина этого заключается в том, что метод COM в моем Addin обращался к объектной модели проекта во вторичном потоке (потоке вызывающего приложения). Это большой нет. Вывод из этого класса маршалов все вызывает этот вторичный поток для первичного потока пользовательского интерфейса, тем самым устраняя проблему.

Смежные вопросы