简短版本: 我需要在屏幕上显示当前选择的mailItem。然后,稍后我需要关闭窗口。问题在于,关闭mailItem窗口将结束Outlook应用程序实例。
详细信息: 我有一个函数调用MailItem.Display(false)在屏幕上显示当前选定的邮件项目。然后,一个单独的工具完成了一些“自动操作”的自动化(移动鼠标单击有关内容)。然后,当完成时,我有一个关闭窗口的功能。问题是,当我关闭邮件项目检查器窗口时,我的Outlook实例将全部关闭。构造Outlook实例的类保持原样,但是由于我在类中全局定义的Outlook应用程序对象现在为null,因此将来的函数调用都将失败。
;
;
这是显示mailItem的第一个功能:
public string DisplayMail(string ID){
try{
Outlook.MailItem mailItem = (Outlook.MailItem)(oNamespace.GetItemFromID(ID,activeFolder.StoreID));
mailItem.Display(false);
mailItem.GetInspector.Activate(); //just to bring the window to the front if it isn't
return("Success");
} catch (Exception e){
return(ErrPrefix + e.ToString());
}
}
以下是关闭mailItem的代码:
public string CloseMail(string ID){
try{
Outlook.MailItem mailItem = (Outlook.MailItem)(oNamespace.GetItemFromID(ID,activeFolder.StoreID));
mailItem.Close(Outlook.OlInspectorClose.olDiscard);
return("Success");
} catch (Exception e){
return(ErrPrefix + e.ToString());
}
}
以下是一些相关的全局代码:
oApp = new Outlook.Application();
oNamespace = oApp.GetNamespace("MAPI");
我正在使用.Net Core 2.0,在玻璃上工作需要它。我正在重建一个做同样工作的旧工具,但是它非常慢并且很难进行错误检查。我试图尽可能多地离开屏幕以加快速度,因此除非绝对必要,否则我不会显示主要Outlook窗口或邮件项目。它们在后台不可见。不幸的是,在这种情况下,我必须显示mailItem,以便其他工具可以完成工作。根据我的判断,Outlook是否检测到应用程序实例死亡的最后一个Outlook窗口关闭事件。这很奇怪,因为如果窗口从不显示并且在后台运行,则该实例将继续执行,直到我释放/杀死它或解构包含该实例的类为止。
感谢您的帮助。