Я работаю в AutoCAD 2014 с помощью Visual Studio 2013.Почему MdiActiveDocument null в начале в AutoCAD 2015+?
С моим кодом я обращаюсь к базе данных MdiActiveDocument из DocumentManager.
Использование базы данных Я начинаю транзакцию и использую метод GetObject транзакции для извлечения объектов Entity.
Database acCurDb = Application.DocumentManager.MdiActiveDocument.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
var obj = acTrans.GetObject(id, OpenMode.ForRead);
if (obj is Entity)
{
// do stuff
}
acTrans.Commit();
}
Это прекрасно работает, пока я нахожусь в разработке и запускаю AutoCAD изнутри Visual Studio. В разработке я установил переключатель «Запустить внешнюю программу» на вкладке «Отладка» свойств приложения, чтобы он запускал AutoCAD для меня, и все работает отлично.
Проблема, с которой я столкнулся, заключается в том, что при загрузке приложения AutoCAD через настройки реестра (я использую загрузку по требованию) MdiActiveDocument имеет значение null, поэтому код выходит из строя. Я обнаружил, что есть документ в Application.DocumentManager, но когда я назначаю базу данных из этого документа в acCurDb, TransactionManager вызывает ошибку, я пытаюсь использовать метод StartTransaction.
if (Application.DocumentManager.Count > 0)
{
foreach(Document doc in Application.DocumentManager)
{
acCurDb = doc.Database;
break;
}
}
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
}
Может кто-то помочь мне понять, почему MdiActiveDocument является недействительным и/или направить меня на правильный способ, чтобы получить объект транзакции в AutoCAD?
Хорошо спасибо за это. Есть ли у вас какие-либо идеи о том, как я сам загружаю MdiActiveDocument или как обойти это? Также я не упомянул, но я работаю в AutoCAD 2014. Я отредактирую свой вопрос и поставлю его. –
Я считаю, что в диспетчере документов есть открытый метод. –