什么是处理因取消长时间运行的异步调用而导致的Outlook加载项检查器UI扭曲空引用异常的最佳方法?

时间:2019-01-16 21:33:10

标签: async-await outlook-addin

当用户打开Outlook电子邮件项目时,我的Outlook加载项会在Outlook.Inspectors集合中创建一个新的Inspector。为了填写Inspector表单区域用户控件,很少调用长时间运行的异步DB调用。通常,在异步调用运行时,用户可以随时关闭电子邮件/检查器窗口。问题在于表单区域关闭事件在异步调用完成之前发生。结果,当异步调用完成时,我的Inspector代码尝试更新表单区域用户控件,但此刻,该控件为空,并放置在表单区域关闭事件中。因此,将引发空引用异常。 我在Inspector Close事件中添加了一些代码,在其中设置了一个指示Inspector关闭的临时标志。在 catch(NullReferenceException)块中检查标志值。如果标志显示电子邮件已关闭,则将忽略空引用异常,并引发新的OperationCancelledException来取消其他相关的运行中异步调用。尽管代码可以工作,但我不确定这是否是以这种方式处理错误的最佳方法。首先,尽管该标志指示电子邮件已关闭,但与已处置的UI用户控件相关的空引用异常可能不是必需的。其次,我需要在所有相关方法中将 catch(NullRefernceException)块添加到try-catch块中。 如果您遇到类似的问题,请问您能否提出解决方案? 谢谢。

1 个答案:

答案 0 :(得分:0)

我建议您保留打开的项目的字典,而不是引发和处理异常,以便您可以轻松地检测特定窗口是否仍处于打开状态。例如,您可以开发检查器包装器-参见Implement a wrapper for inspectors and track item-level events in each inspector