Я знаю, что API-интерфейсы Autocad не должны вызываться/использоваться в многопоточности. Но как насчет выполнения многопоточного задания (в подключаемом модуле Autocad .Net), которое не требует каких-либо конкретных вызовов/типов Autocad?
Ситуация такова: 1. некоторые полилинии САПР извлекаются через API, их интересующие свойства заворачиваются в пользовательские типы, а затем 2. в другом слое выполняются некоторые многопоточные вычисления для этих пользовательских типов. 3. Пользовательские типы приложений записывают свои результаты обратно в полилинии САПР через API Autocad.
Только второй шаг выполняется в многопоточном режиме.
Приложение использует метод StartTransaction() для получения объекта Transaction. У меня не было ни одного сбоя за многие годы. Но теперь я пытаюсь использовать StratOpenCloseTransasction(), он много раз падает. В частности, он падает, когда вызывается Editor.Rengen(), поскольку я думаю, что он проходит через каждый объект в базе данных и, возможно, некоторые из них повреждены. Я сузил проблему, и одной из причин, по-видимому, является многопоточность.
Есть ли причина, по которой CAD должен давать сбой при вызове многопоточности, хотя API-интерфейсы не задействованы? Безопасно ли использовать многопоточность таким образом? Обрабатывает ли StartTransaction() объекты лучше, чем StartOpenCloseTransaction, с точки зрения их удаления? Поскольку у меня не было сбоев на этом.
Большое спасибо
Editor.Regen
. Это произошло из-за переходных сущностей. - person Maxence   schedule 02.09.2015