【发布时间】:2019-08-05 23:10:44
【问题描述】:
我正在写一个 C# VSTO Excel 插件。
在我的项目中,需要更新和合并大量的单元格。
为了减少闪烁并提高性能,我将Application.ScreenUpdating之前设置为false,操作完成后设置回true。
问题是有时我将异常设置回true 状态。
错误信息:
(HRESULT:0x800AC472)(VBA_E_IGNORE)。
在这种情况下,Excel 卡住了(因为没有屏幕更新),唯一的选择是退出/重新打开 Excel。
这是我的代码:
Excel.Application app = somevalue;
try
{
app.ScreenUpdating = false;
return true;
}
catch (Exception e)
{
e.LogExceptionError($"SafeEnableScreenUpdating -> param={enable}");
}
... some large operation.
try
{
app.ScreenUpdating = true;
return true;
}
catch (Exception e)
{
// exception is here.
e.LogExceptionError($"SafeEnableScreenUpdating");
}
到目前为止,我发现的唯一可能的解决方案是创建一个循环并尝试恢复几次状态。 有没有人遇到过这样的问题?
【问题讨论】:
-
我会使用Background Worker 进行设置。您也可以添加Finally 来重置屏幕更新。
-
不确定Finally 能在这里提供什么帮助?调用 app.ScreenUpdating = true; 操作失败-> 它在 finally 块中也会有相同的行为。
-
抱歉错过了那部分,在我的手机上。我仍然会检查后台工作人员。在单独的线程中运行该过程可能会有所帮助。
-
在更新时将“可见”标志设置为 false 会发生什么。