使用计时器使用 C# VSTO 检查 Outlook 连接状态

Outlook connection status check with C# VSTO using timer

我正在编写一个程序,它应该检查 outlook 的连接状态,如果没有连接到服务器,则弹出一个在中间写入 exchangeconnectionstatus 值的表单对象。

所以,为此我写了这些

private bool error;
Form1 form1 = new Form1();

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
  error = true;
  this.Application.Startup += Application_Startup;
}

private void Application_Startup()
{
  System.Threading.Timer timer = new System.Threading.Timer( _ => showForm(), null, 10000, 30000);    
}

private void showForm()
{
  if (Application.Session.ExchangeConnectionMode != Outlook.OlExchangeConnectionMode.olCachedConnectedFull && error)
  {
    error = false;
    form1.setlabel(Application.Session.ExchangeConnectionMode.ToString());
    form1.Show();
  }
}

如果我在 application_startup 事件中调用 showForm 它工作正常。 但是如果我在每 30000 毫秒触发一次的计时器中调用 showForm,Form 对象显示但冻结。

这是照片 worked form object 这是 freezed form object

就是这样,希望我问你的问题很好。 我将不胜感激任何人知道这个“计时器事件冻结”的事情,或者可以显示另一种方法来检查 outlook 与 VSTO 或 addin

的连接状态

确保您使用 Forms 命名空间中的 Timer 对象,而不是 Threading 命名空间中的 - 它使用 Windows 消息并在主线程上触发。

终于解决了这种情况:

只需调用 ShowDialog();而不是 Show();

:D