Здравствуйте, _Michail, Вы писали:
_M>Здравствуйте, Chupa_Kabra, Вы писали:
C_K>>C_K>>(object[,])((Excel.Range)shit.get_Range(excel.Cells[1, 1], excel.Cells[25, 10])).Value2
C_K>>
_M>В этом случае я имею только массив Value2, мне еще нужну знать Text, формат ячейки, бордюры и т.д.
_M>Если я делаю
_M>(object[,])((Excel.Range)shit.get_Range(excel.Cells[1, 1], excel.Cells[25, 10])).Text к примеру, валиться
_M>System.InvalidCastException: Specified cast is not valid.
_M>Что то можно кроме Value2 взять?
Вы не подскажете мне как получить из Value2 дату, а не double?
У меня в ячейке стоит дата, но когда я получаю значение через Value2, то результатом является double

(
Огромное спасибо.
Hello, "IDecember"
>
> Кстати, а почему? Тоже встречал такой код, но не понял, зачем его
> используют.
В некоторых случаях (особенно при работе с ActiveX/COM) проще запустить
явную сборку мусора чем, париться с учетом всех используемых ресурсов.
Например, Windows.Forms в некоторых случаях так делает. в целом, для
клиетского процесса принудительный запуск сборщика мусора это не такая уж и
страшная вещь (если, не увлекаться).
Так же, в некоторых случаях без обращения к сборщику мусора тоже тяжело
обойтись:
PRB: The Garbage Collector Does Not Release a COM Object That Handles
Events as You Expect
PRB: Managed Object Is Not Garbage Collected When the Managed Object
Handles an Event for an Unmanaged (COM) Object
BUG: The XmlValidatingReader Class Does Not Close the Stream When the XML
Document References a DTD That Has Errors
Что касается примера из оригинального топика то, в случае использования
Excel в клиентском приложении
GC.Collect();GC.WaitForPendingFinalizers(); это вполне адекватное
решение (достаточно посмотреть для скольких объектов там не сделан
Marshal.ReleaseComObject и выбрать что будет проще — отслеживать все самому
либо, один раз вызвать сборщик мусора).
Конечно, можно для дополнительной красоты решения вынести сборку мусора в
отдельный класс тогда, сборка мусора будет не так сильно бросаться в глаза.
Posted via RSDN NNTP Server 2.0 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
>Кстати, а почему? Тоже встречал такой код, но не понял, зачем его используют.
Потому что без него excel.exe остается висеть в памяти. А многих это беспокоит. Вот пример:
Excel.Application xl = new Excel.ApplicationClass();
Excel.Workbook wb = xl.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
xl.Quit();
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(xl);
//GC.Collect();
Вроде все правильно освобождается, а процесс висит после выхода из метода. Если убрать комментарий — пропадает.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение