Я написал сервер ac# RTD на основе Множественных тем Кенни Кера в С#
Основное различие между его дизайном и моим в том, что мои данные исходят от клиента WCF. Я использую тот же тип таймера и каждые пару секунд вызываю m_callback.UpdateNotify();
. Мой метод RefreshData
вызывает функцию в моем клиенте WCF со значениями темы и использует результат в качестве значения для Excel. Все отлично работает.
Проблема возникает, когда я закрываю Excel.
Когда я закрываю Excel, я получаю окно с сообщением «Microft Excel перестал работать».
Мой метод ServerTerminate()
очищает все мои темы, вызывает close на моем клиенте WCF и завершает работу без ошибок.
Я думал, что проблема может быть проблемой COM, поэтому я попытался добавить
while ( Marshal.ReleaseComObject( m_callback ) > 0 ) ;
m_callback = null;
Всплывающее окно по-прежнему отображалось, поэтому я попытался добавить
GC.Collect();
GC.WaitForPendingFinalizers(); //SEHException thrown from this
GC.Collect();
GC.WaitForPendingFinalizers();
Добавление этих строк вызывает исключение. если я игнорирую исключение, Excel закрывается без проблем, но если я устанавливаю свой RTD-сервер на компьютер с Excel 2010, всплывающее окно все еще там.
У меня есть Excel 2007 (12.0.6665.5003) SP3 MSO (12.0.6662.5000). Я разрабатываю свой сервер RTD c# с помощью Visual Studio 2008, и мой проект имеет ссылку на Microsoft.Office.Interop.Excel версии 12.0.0.0.