У меня есть добавление Excel, написанное на C# 2.0, в котором я испытываю странное поведение. Обратите внимание, что такое поведение можно увидеть только в Excel 2003, а не в Excel 2007 или 2010Excel :: Объект формы получает освобождение автоматически после того, как счет достигает 18 в списке <T>
Выпуск:
Когда пользователь нажимает на кнопку команды импорта, файл считывается и ряд Формы создаются/добавляются на рабочий лист с использованием метода Worksheet :: Shapes :: AddPicture(). Ссылка на эти объекты Shape сохраняются в общем списке:
List<Excel.Shape> list = new List<Excel.Shape>();
Все работает отлично, пока список содержит менее 18 ссылок. Когда счетчик достигнет 18, и добавляется новая ссылка Shape, первая, то есть @ index [0], будет отпущена. Я не могу вызывать какой-либо метод или свойство в этой ссылке, и вызов метода/свойства вызывает COMException (0x800A1A8), то есть объект Обязательный. Если я добавлю еще один, то ссылка @ [1] недоступна и так далее.
Странно ... это случается только с объектом Shape. Если я добавлю один Shape, а затем 17 нулей в список, тогда это не произойдет, пока не будет добавлено еще 17 объектов Shape.
У кого-нибудь есть идея, почему это происходит после того, как счет достигает 18?
Я думал, что это может быть что-то со способностью По умолчанию по умолчанию. Что-то вроде перестановки ссылок, в течение которых они были выпущены, поэтому я инициализировал его вместимостью 1000, но все равно не повезло.
List<Excel.Shape> list = new List<Excel.Shape>(1000);
Любая идея ??
ОБНОВЛЕНО
Найдено, что исключение генерируется при попытке доступа к объекту Shape через индекс строки играет определенную роль. Когда добавляется новая Shape, я проверяю существующий объект Shape, вызывая Worksheet :: Shapes :: Item (shapename). Это вызывает исключение, если Shape не найден. Если я удалю эту строку кода ... она отлично работает.
Есть ли другой способ проверить, существует ли Shape без генерирования этого исключения или итерации по всей коллекции?
Спасибо за ответ. Я пытался, но все равно не повезло. Когда я пытаюсь получить доступ к коллекции Shape from Shapes с использованием сохраненного имени, он выдает исключение, говорящее, что объект не существует. – A9S6
Может быть, это коллекция Shapes, которая не существует тогда? Можете ли вы прокручивать фигуры вручную, нажимая на них? – GSerg
Да коллекция Shapes существует, потому что, как я уже сказал, Shapes освобождаются после добавления 18 объектов. Поэтому я могу получить доступ к другим объектам Shape, но не к ранее добавленным. – A9S6