Outlook 2013插件邮件项创建阻止Outlook
本文关键字:Outlook 创建 2013 插件 | 更新日期: 2023-09-27 18:12:12
我目前正在与Visual Studio 2013一起玩Office 2013插件。我已经创建了一个Ribbon和一个按钮,显示一个小的Windows窗体:
private void outterMailCreateNewFaxBTN_Click(object sender, RibbonControlEventArgs e)
{
CreateNewFax cnf = new CreateNewFax(this);
cnf.Show();
}
当用户单击表单上的一个按钮时,将创建一个新的MailItem(其中包含一些信息)。
private void button1_Click(object sender, EventArgs e)
{
this.Dispose();
this.outterMailRibbon.setFaxNumber(faxNumber, this);
}
下面是setFaxNumber-Method:
public void setFaxNumber(String faxNumber, CreateNewFax cnf)
{
cnf = null;
//mother.Dispose();
this.faxNumber = faxNumber;
Outlook.Application application = Globals.ThisAddIn.Application;
Outlook.MailItem myMailItem = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem);
myMailItem.To = this.faxNumber;
myMailItem.Subject = "[FAX:" + this.faxNumber + "]";
myMailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
((Outlook.ItemEvents_10_Event)myMailItem).Send += new Microsoft.Office.Interop.Outlook.ItemEvents_10_SendEventHandler(ThisAddIn_Send);
this.gMailItem = myMailItem;
myMailItem.Display(true);
}
我目前面临的问题是,当用户点击表单上的特定按钮后,Outlook主进程被阻塞,UI冻结,直到新创建的消息被发送或丢弃。
如何避免这种行为(使用户能够显示来自outlook的其他邮件,而这个新创建的MailItem仍然可以由用户编辑)?
编辑:Outlook-UI在MailItem创建后冻结。此时,Windows Form仍然是打开的,我可以像往常一样使用Outlook-UI。
EDIT:
尝试将myMailItem.Display(true);
更改为myMailItem.Display(false);
作为MailItem。显示文档说明false是默认的模态参数。如果设置为true, outlook将冻结,直到它准备好。
旧答案(在大多数UI冻结情况下,这将解决问题,但这种情况不同):
继续你所说的,听起来就像send mail方法在主线程被发送出去之前一直保持着,这将导致主UI冻结。处理冻结UI的最佳方法是将方法线程化,或者有时您可以使用分派器计时器并将方法放入tick中。
我不确定这是否会起作用,因为我是从记忆中写的,但如果你要线程函数,你可以这样做:
var thread = new Thread( () =>
{
this.outterMailRibbon.setFaxNumber(faxNumber, this);
});
thread.Start();
thread.Join(); // The thread will auto leave and close once the execution is complete
上面的代码将在一个新的线程中执行setFaxNumber方法,该线程与运行UI的主线程分开,这意味着它不会占用任何UI加载。
如果你需要更多的信息,只要问,我可以把它添加到我的答案:)