我在 C# 中创建了一个插件,它为 Excel 实现了用户定义的函数。 这些 UDF 立即返回,但它们控制后台异步过程。
这些程序的状态需要监控并呈现给 Excel。我已选择使用复选框显示状态。
后台线程然后更新链接到特定后台程序的复选框。
我用 try/catch block 包装了对 Excel 模型的调用,并在延迟后重试调用,以防 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 单元线程属性,但没有任何运气。这不是并发问题,因为我没有在其他任何地方更改复选框属性。
有没有人有过类似的经历?
谢谢!
好吧,我正在破解一个目前工作正常的快速修复程序,尽管我仍然不明白为什么会发生这种情况。
目前,如果设置后设置值不正确,我会将其视为异常并将请求放在后台线程中以备将来尝试。
代码然后迭代,直到它设法更新复选框。
不喜欢它,但它给出了正确的行为。
我是一名优秀的程序员,十分优秀!