Подскажите, возможно вообще работать с базой Автокада в нескольких потоках, и если да, то как правильно это делать?Нельзя. Только из главного потока. Точка.
https://adn-cis.org/ispolzovanie-potokov-dlya-fonovoj-obrabotki.htmlПример интересный, но создание контрола для запуска процесса в основном потоке похоже на хак. Может быть сделать пример с Dispatcher? И использовать таск вместо создания потока руками.
создание контрола для запуска процесса в основном потоке похоже на хак.Это рекомендация от ADN DevHelp. Так что использование допустимо.
Еще есть вопрос - можно ли во вторичных потоках создавать объекты автокада, или через конструктор, или через вызов методов Clone, Offset и др, а затем в основном потоке открыть транзакцию и добавить их в базу? Это корректно?Нет. Это всё чревато спонтанными аварийными завершениями AutoCAD...
У меня в программе запускается длительная операция, в которой выполняются многочисленные обращения к БД Автокада для получения и создания объектов. Чтобы не блокировать все приложение, я запустил ее в отдельном таске.
Даже если подумать логически, не стоит давать пользователю делать что-то во время изменения БДДа, есть риск что пользователь что-то удалит и весь расчет упадет :(
Скорее всего, разработчики ядра не предусмотрели параллельную работу из различных потоковСейчас, когда даже в телефонах стоят многоядерные процессоры, это особенно печалит...
Вставь progressbar.Это именно то что я собирался сделать. Спасибо за пример, я и не знал что есть готовый прогрессбар - ProgressMeter. Правда очень уж куцый он, ни процент вывести, ни оставшееся время. И почему-то затирается строкой состояния при обновлении экрана. Есть какой то ProgressTrayItem, может быть по нему есть пример, не нашел его в документации.
Я бы подумал про изменение логики работы программы.В том то и дело что бизнес логика содержит создание объектов автокада - как промежуточных, для расчета, так и окончательных для добавления в базу. И разделить их не получится.
Правда очень уж куцый он, ни процент вывести, ни оставшееся время.Про процент не понял, т.к. именно процент он и выводит, плюс заголовок.
бизнес логика содержит создание объектов автокада - как промежуточных, для расчета,Вот от этого я и предлагаю отказаться. Вы видимо пытаетесь что то решить геометрическими построениями, что влечет за собой огромные накладные расходы, может стоит посмотреть и поискать аналитические решения, это точно будет быстрее и можно будет параллелить.
Про процент не понял, т.к. именно процент он и выводит, плюс заголовок.я имел ввиду вывод процента в виде числа, плюс вывод оставшегося времени выполнения, этапа
Если у тебя несколько последовательных действий, то можешь вновь создать его с новым заголовком, так повысишь информативность:и заголовок не меняется, даже при UpdateScreen, только созданием нового прогрессбара можно новый установить
Вот от этого я и предлагаю отказаться.да, использование другого решения снимет эту проблему, особенно принимая во внимание случаи некорректной работы методов автокада. Останавливает то что на поиск и использование нового решения потребуется время....
Цитата: Привалов Дмитрий от 06-05-2020, 18:25:22Это стандартный Progressbar, который использует сам AutoCAD. Если тебя не устраивает стандартный, то можешь создать свой (например, немодальная форма).
Про процент не понял, т.к. именно процент он и выводит, плюс заголовок.
я имел ввиду вывод процента в виде числа, плюс вывод оставшегося времени выполнения, этапа
Цитата: Привалов Дмитрий от 06-05-2020, 18:25:22
Если у тебя несколько последовательных действий, то можешь вновь создать его с новым заголовком, так повысишь информативность:
и заголовок не меняется, даже при UpdateScreen, только созданием нового прогрессбара можно новый установить
Останавливает то что на поиск и использование нового решения потребуется время....Вполне возможно, что это решение уже найдено и тебе на форуме подскажут. Главное не стесняться задавать вопросы.
возможно создание объектов автокада вне транзакции?Да. Это в принципе нормальный сценарий. Более того ведь есть вариант вообще не использовать транзакции.
еще вопросУ нас принято "один вопрос - одна тема". Это на будущее.
возможно создание объектов автокада вне транзакции? с последующим добавлением их в транзакцию или освобождением через Dispose. Или это тоже чревато?В теории можно попробовать создавать объекты в другом потоке и добавлять в массив. Только брать простые объекты, типа точек и отрезков, а не таблицы и размеры.