c# - Outlook VSTO - 如何识别 Outlook 何时完全加载
问题描述
我有一个用 C# 编写的 Outlook VSTO。我正在使用 Outlook 2016 (Office 365)。
我正在尝试确定 Outlook 完全加载和更新所有商店的时刻,并在发生这种情况时触发事件,以便我可以启用/禁用功能区中的某些按钮。
我的问题是我如何知道 Outlook 在初始启动时已完全实例化并完成加载所有商店?
我能够确定的最接近的是最后一个 Application.Reminder 事件何时触发,但必须有一种更简单的方法。每次将提醒加载到提醒窗口时都会触发 Application.Reminder 事件,该事件仅在所有商店都更新后在 Outlook 的初始启动时显示,大约在那时我希望触发自定义事件。
这里提出了一个类似的问题,但没有真正的答案。
MTIA
达林
编辑 1:我已经确定可以使用 Application.Reminders.BeforeReminderShow 事件捕获我正在寻找的事件 - 此事件在显示提醒窗口之前触发。
该事件可以连接到应用程序启动事件中..
Application.Reminders.BeforeReminderShow += Reminders_BeforeReminderShow;
private void Reminders_BeforeReminderShow(ref bool Cancel)
{
Debug.WriteLine("Reminders_BeforeReminderShow");
MessageBox.Show("Reminders_BeforeReminderShow");
}
但是,如果另一个 VSTO 已挂钩该事件,可能会创建竞争条件,则该事件似乎也不会触发......如果另一个 VSTO 被卸载 - 事件正常触发......
解决方案
一旦我弄清楚我需要创建一个提醒对象的变量,并使用来自该对象的事件,而不是直接使用 Application.Reminders 事件,我的问题的答案就相对容易了。当另一个 VSTO 也访问 Reminders 集合的事件时,这种对事件的访问形式阻止了竞争条件,正如我所描述的那样。
所以我的问题的解决方案是向 ThisAddin.cs 添加一个私有的 Reminders 对象:
private Outlook.Reminders m_Reminders;
然后在 ThisAddIn_Startup 中实例化事件监听器:
m_Reminders = Application.Reminders;
m_Reminders.BeforeReminderShow += Reminders_BeforeReminderShow;
监听器的事件代码如下:
private void Reminders_BeforeReminderShow(ref bool Cancel)
{
Debug.WriteLine("Reminders_BeforeReminderShow");
MessageBox.Show("Reminders_BeforeReminderShow");
}
BeforeReminderShow 事件是在应用程序被实例化并且商店的初始更新完成之后触发的最后一个事件。
虽然我的示例没有显示它,但我有一个小方法被调用并更新 VSTO 功能区中的功能区按钮。
推荐阅读
- swift - Firestore 安全规则和 Swift
- python - 数据帧的 Loess/lowess 错误——ValueError:值的长度与索引的长度不匹配
- html - 如何使用记事本++将HTML文件作为文字而不是代码打开?
- python - Python-Flask:前端客户端可以从连接到某些公司服务的 websocket 接收数据流吗?
- node.js - 为什么我的 dockerized nodejs 服务器无法连接到我的 dockerized mongodb?
- react-native - 如何在没有 Nodejs 的情况下使用 Webview 在 Expo ReactNative 应用程序中实现 PayPal
- php - 如何在 PHP 中使用 preg_match 从字符串中提取 IP:?
- html - 如何增加文本与其下划线之间的差距
- java - 旋转录制的鼠标移动 [Java]
- discord.js - 如何检测消息是否是嵌入的(discord.js)