Я создал надстройку в C #, которая реализует пользовательские функции для Excel.
Эти UDF возвращаются немедленно, но они управляют фоновыми асинхронными процедурами.
Эти процедуры имеют статус, который необходимо отслеживать и представлять в Excel.
Я выбрал отображение статуса с помощью флажков.
Фоновый поток затем обновляет флажок, связанный с определенной фоновой процедурой.
Я обернул вызовы к модели Excel блоком try / catch и повторил вызов после задержки на случай, если Excel не сгенерирует исключение. Этот механизм также работает правильно.
Проблема в том, что иногда, хотя код для изменения флажка выполняется успешно, сам флажок не изменяется в Excel.
Я сделал проверку исправности атрибутов флажка, которые я изменяю, и вижу, что они не изменились в журналах:
checkBox.Value = false;
checkBox.Interior.Color = 0x00DDDDDD; // light grey in AABBGGRR format
checkBox.Caption = "Off";
// this sometimes prints the values the checkbox had before the above line
LogDebug( "Color: " + checkBox.Interior.Color + " Value:" + checkBox.Value + " caption:" + checkBox.Caption );
Это происходит только в Excel 2003. В Excel 2007 проблема как никогда возникла.
Я попытался поиграться с Application.ScreenUpdating, Application.Interactive, без каких-либо везений изменив атрибуты потока COM-квартиры.
Это не проблема параллелизма, потому что я нигде не меняю атрибуты флажка.
Как у кого-нибудь был подобный опыт?
Спасибо!