在C#中从后台线程更新Excel 2003中的checkbox有时会失败

我在C#中创build了一个实现用户定义函数的加载项。 这些UDF立即返回,但它们控制后台asynchronous过程。

这些程序的状态需要被监视并呈现给Excel。 我select使用checkbox显示状态。

后台线程然后更新链接到特定后台程序的checkbox。

我使用try / catch块将调用包装到Excel模型中,并在延迟后重试调用,以防Excel未准备好引发exception。 这个机制也能正常工作。

问题是有时,即使修改checkbox的代码运行成功,checkbox本身也不会在Excel中修改。

我已经对我正在更改的checkbox属性进行了完整性检查,可以看到它们在日志中没有更改:

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公寓线程属性摆弄。 这不是一个并发问题,因为我没有改变任何地方的checkbox属性。

任何人都有类似的经历?

谢谢!

那么,我正在黑客快速修复,现在运行良好,但我仍然不明白为什么会发生这种情况。

现在,如果在设置它们之后设置的值不正确,那么我将它视为一个exception,并将请求放在后台线程中供将来尝试。

代码然后迭代,直到它设法更新checkbox。

不喜欢它,但它给出了正确的行为。