Тема: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Во время импорта блоков из ACAD (посредством COM интерфейса) получаю исключение с описанием: Фильтр сообщений выдал диагностику о занятости приложения. (Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)).
Исключение генерируется в тот момент, когда одновременно с импортом пользователь продолжает работать с чертежом. Подскажите каким образом можно заблокировать чертеж на время импорта или проверять занято приложение или нет

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

> Shavt
Попробуй:

IAcadApplication.GetAcadState().IsQuiescent

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Получается, что эту проверку нужно делать при каждом обращении к ACAD примерно так:

while(!acadApp.GetAcadState().IsQuiescent);
//что то делаем

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

> Shavt
Это вопрос или утверждение? smile

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Это был вопрос :)
Попробовал - работает. Вот только выглядет это
не очень хорошо приложение висит в цикле и ждет
когда освободится ACAD вот если можно было бы както заблокировать чертеж или все приложение ACAD было бы намного лучше.

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

acadApp.Visible = false;

И пользователю будет очень затруднительно что-нибудь с ним сделать. smile

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Сегодня проверил как справляется с задачей импорта/экспорта другая программа, так вот никаких проблем одновременной работы юзера в ACAD и импорта/экспорта блоков небыло. Может я ссылку на блок получаю ни от того объекта от которого следовало ее получать. Я работаю с объектом ModelSpace...

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Это внешнее .NET-приложение? Если внутреннее, то таких проблем возникать не должно. Если это внешнее приложение, то оно запускает второй AutoCAD или работает с уже запущенным? Если второй, то проблем быть не должно (разве что при попытке работать с одним и тем же чертежом). Ну а если с запущенным, то это (IMHO) глупость давать возможность работать с AutoCAD одновременно и своему приложению и пользователю.

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Оба приложения внешнии. То которое я сегодня тестировал и которое работало без проблем не .NET-приложение. Мое приложение .NET. Оба подключаются к уже запущенному AutoCAD. На счет глупости я не знаю, но факт остается фактом неуправляемое приложение работает параллельно даже в том случае если пользователь работает с AutoCAD..Net приложение без проверки IAcadApplication.GetAcadState().IsQuiescent сразу же генерирует исключение, а с проверкой состояния крутится в цикле while(!acadApp.GetAcadState().IsQuiescent) до тех пор пока пользователь не завершит какое либо действие, вот и возникает вопрос:  можно ли работать с блоками AutoCAD как нибудь иначе нежели через ModelSpace

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

> Shavt
Что такое "работать с блоками"? И что ты понимаешь под блоками (AcadBlock или  AcadBlockReference)?

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Работаю через AcadBlockReference. Получив ссылку на блок получаю ссылку на коллекцию его атрибутов. Из этих атрибутов получаю уже нужную мне информацию

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

> Shavt
Попробуй окаймить свой код такой парой:

acadDoc.Utility.SendModelessOperationStart("OP");
//
// Код
//
acadDoc.Utility.SendModelessOperationEnd("OP");

Не уверен, но возможно поможет.

Re: Ошибка: Исключение из HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)

Не помогло... :(
Вариант с ожиданием момента когда AutoCAD перейдет в состоянии idle тоже неплох, но во время экспорта если сильно часто щелкать левой кнопкой мыши по листу чертежа, имитируя процесс выделения его фрагментов, приложение стабильно где-нибудь(имеется ввиду в цикле где происходит непосредственная работа с AutoCAD) да загнется, хотя каждое обращение по ссылке предваряется проверкой например:

while(!app.GetAcadState().IsQuiescent);
ar.TextString = value;
//где ar есть AcadAttributeReference

При импорте, после того как ввел проверки состояния AutoCAD (см. выше), ошибок не наблюдалось хоть защелкайся по листу.
Наверное в конечном итоге остановлюсь на варианте

acadApp.Visible = false;