Оффтопик. Изучаем C#

Автор Тема: Оффтопик. Изучаем C#  (Прочитано 245023 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Рустем

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Последовательность выбора объекта
« Ответ #240 : 10-10-2021, 09:36:44 »
Здравствуйте. Подскажите почему если мы запишем BlockReference полученный из транзакции  в локальную переменную, а потом попытаемся обратиться к ней также через транзакцию уже в рамках другой функции, то появится ошибка, что объект не может быть открыт для чтения. Я решил для себя эту проблему, просто использую EntityResult.ObjectId из GetEntity. Но как говорится в рамках спортивного интереса. Это тонкости работы CLR или тонкости работы Net??

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #241 : 10-10-2021, 11:12:23 »
попытаемся обратиться к ней также через транзакцию
Это как?
Общее правило - нигде и никогда не хранить никаких объектов, полученных из транзакции (в смысле, вне тела транзакции не хранить). Их хранит транзакция. Если функция маленькая и вызывается часто, то можно передать в нее саму транзакцию и снова получить тот же объект из транзакции - получите ссылку на тот же самый объект, а не новый Entity, никаких выделений памяти и потерь времени. Если надо передавать объекты - то передавайте и храните ObjectId.

Оффлайн Рустем

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Последовательность выбора объекта
« Ответ #242 : 10-10-2021, 18:24:00 »
Спасибо за ответ avc. Доступно и понятно. В LISP и VBA таких проблем нет, вот я и удивился. Вот скажем я получил BlockReference, из него BlockTableRecord из него выбрал AttributeReference посредством GetObject.  И вот я добрался до заветных полей "Tag" и  "TextString" и т.д. и все это в рамках одной транзакции. Получается мне нельзя эти поля сохранить, чтобы обратиться к ним из другой функции. В другой функции мне придется опять спускаться из ObjectId. Я не против, правила есть правила, но ведь как то это не совсем то. Вместо одной операции целых четыре. Видимо есть путь получить ссылки на атрибуты не используя транзакцию, записать все поля, потом уже обратиться к ним с использованием транзакции.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #243 : 10-10-2021, 18:30:04 »
И вот я добрался до заветных полей "Tag" и  "TextString" и т.д. и все это в рамках одной транзакции. Получается мне нельзя эти поля сохранить, чтобы обратиться к ним из другой функции.
Ну почему же нельзя. Указанные вами поля имеют тип string - строки можно сохранить. А вот сами наследники DBObject вне рамок транзакции невалидны.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #244 : 10-10-2021, 18:40:40 »
А я и не писал, что нельзя ПЕРЕДАВАТЬ. Нельзя СОХРАНЯТЬ. То есть в какой-то хелпер передать вполне можно. Главное, чтоб объект не сохранился ни в каких списках и полях класса после того, как уничтожена транзакция. Обращение к объекту уничтоженной транзакции - это гарантированный фатал Автокада. Но если вы уверены что ваш метод не оставит ссылок на Entity где-то во вне, то смело можете передавать. То что вы описываете - вполне можно делать с Entity пока не закрыта транзакция.
Извлечение атрибута из транзакции по его Id - это одна операция, а не 4. Почему бы и не передать его Id ?  ObjectId атрибута - это по сути и есть ссылка на атрибут. не такая прямая как вам хочется, зато безопасная.

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #245 : 15-02-2023, 14:53:28 »
Подскажите как быть со сторонними библиотеками? Для склеивания pdf использовал библиотеку itext7 добавив через nuget, работает нормально, но теперь к dll в 250 кб прилагается пара десятков других размером под 18 метров, с этим можно что-то сделать или так и придется их таскать со своим файлом?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #246 : 15-02-2023, 15:09:25 »
Подскажите как быть со сторонними библиотеками? Для склеивания pdf использовал библиотеку itext7 добавив через nuget, работает нормально, но теперь к dll в 250 кб прилагается пара десятков других размером под 18 метров, с этим можно что-то сделать или так и придется их таскать со своим файлом?
Придется таскать. И более того - эта библиотека платная!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #247 : 15-02-2023, 15:26:19 »
Для склеивания pdf использовал библиотеку itext7
Возможно тебе будет достаточно библиотеки itextsharp (бесплатная). Там требуется таскать только одну dll, размером меньше 2.5Мб.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Оффтопик. Изучаем C#
« Ответ #248 : 15-02-2023, 16:18:52 »
И более того - эта библиотека платная!
Вроде iTextSharp5 можно использовать бесплатно

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #249 : 15-02-2023, 16:45:53 »
И более того - эта библиотека платная!
Вроде iTextSharp5 можно использовать бесплатно
5.5.13.3 - последняя версия, которую можно использовать бесплатно. Но в вопросе указана 7 версия

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #250 : 15-02-2023, 18:22:58 »
Возможно тебе будет достаточно библиотеки itextsharp (бесплатная). Там требуется таскать только одну dll, размером меньше 2.5Мб.
Блин, я сначала как раз itextsharp собрался ставить, но прочитал прям в ее описании что она устаревшая и вместо нее itext7 и поставил ее, сейчас поменял, правда пришлось полностью переписать модуль соединения, на этот раз написал сам, старый просто в виде функции скачанной из инета был. Теперь из дополнительных файлов только сам itextsharp.dll и BouncyCastle.Crypto.dll(хз что это, видимо что то в itextsharp использующееся). Спасибо за совет.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #251 : 15-02-2023, 18:45:12 »
Теперь из дополнительных файлов только сам itextsharp.dll и BouncyCastle.Crypto.dll(хз что это, видимо что то в itextsharp использующееся)
Точно. Про вторую dll я забыл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #252 : 15-02-2023, 21:03:22 »
И более того - эта библиотека платная!
А какой вообще признак платной библиотеки? Это только в пользовательском соглашении прописывается?
Почитал про itext7 там точно такая же лицензия как и в itextsharp - Open Source AGPLv3 license как я понял не для коммерческого использования можно пользоваться свободно? И какие-то ограничения вроде того что должен предоставить свой код написанный с помощью этой библиотеки и где-то прописывать ее упоминание.

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #253 : 17-02-2023, 09:50:59 »
Еще один вопрос, для ограничения ввода в текстбоксы только цифр сделал public static класс в котором разместил несколько public static функций ограничивающих ввод определенных символов. В Designer создаю события типа KeyPress в котором ссылаюсь на эти функции, все прекрасно работает, но периодически эти события просто исчезают, в Visual Studio есть какие-то ограничения на события, ссылающиеся на другие классы?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Оффтопик. Изучаем C#
« Ответ #254 : 17-02-2023, 11:04:12 »
Если используется WPF, я бы подумал на предмет валидации данных в окне.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!