通过交换同步VSTO outlook数据问题

时间:2010-04-19 01:57:21

标签: c# outlook vsto outlook-addin

我为outlook写了一个插件,当我点击按钮时会弹出约会的LastModificationTime

像这样的按钮事件处理程序

  Outlook.ApplicationClass outlook = new Outlook.ApplicationClass();
  Outlook.NameSpace ns = outlook.GetNamespace("MAPI");
  Outlook.MAPIFolder folder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
  Outlook.Items FolderItems = folder.Items;
  DateTime MyDate = DateTime.Now;
  List<Outlook.AppointmentItem> Appts = (
       from Outlook.AppointmentItem i in folder.Items
       where i.Start.Month == MyDate.Month && i.Start.Year == MyDate.Year
       select i).ToList();
  foreach (Outlook.AppointmentItem Appt in Appts)
  {
    System.Windows.Forms.MessageBox.Show(Appt.LastModificationTime.ToString());
  }

问题发生在我在手机中更改约会,然后通过交换服务器将其同步到Outlook

产生问题的步骤:

  1. 点击按钮,将LastModificationTime设为“time1”

  2. 在我的手机中将开始日期更改为“start1”,通过交换服务器同步到Outlook

  3. 点击按钮,获取LastModificationTime,仍为“time1”

  4. 在outlook中将开始日期更改为“start2”,但约会仍处于“start1”日期。

  5. 重新启动展望

  6. 点击按钮,将新LastModificationTime设为“time2”,约会处于“start1”日期,“start2”消失。

  7. 没有问题的步骤

    1. 点击按钮,将LastModificationTime设为“time1”
    2. 1.1。重启前景

      1. 在我的手机中将开始日期更改为“start1”,通过交换服务器同步到Outlook

      2. 点击按钮,获取LastModificationTime,“time2”

      3. 看起来像 列出Appts 如果通过Exchange服务器更改约会,则永远不会刷新到最新值。

        这个问题有什么解决方案吗?或其他原因使它成为现实?

2 个答案:

答案 0 :(得分:1)

没有看到其他代码,但您需要记住释放约会对象 Marshal.ReleaseComObject的。 您的客户端Outlook是否也处于缓存模式?

马库斯

答案 1 :(得分:0)

我有同样的问题,这是我的解决方案:

使用:

Outlook.Folder calFolder = outlookApplication.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar) as Outlook.Folder;

而不是:

Outlook.MAPIFolder folder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);

区别在于Outlook.MAPIFolder和Outlook.Folder,我不知道为什么但Outlook.Folder对我有效。