1

我目前正在使用 Visual Studio 2013 使用 Office 2013 加载项。我创建了一个带有显示小 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 方法:

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 仍然可以由用户编辑)?

编辑:创建 MailItem 后 Outlook-UI 冻结。当时,Windows 窗体仍然打开,我可以像往常一样使用 Outlook-UI。

4

1 回答 1

2

编辑:

尝试更改myMailItem.Display(true);MailItem.Display文档指出 false 是默认模式参数myMailItem.Display(false);。如果设置为真前景将冻结,直到它准备好。


旧答案(在大多数 UI 冻结情况下,这将解决问题,但这种情况不同):

通过继续您所说的,听起来发送邮件方法正在阻止主线程直到它被发送出去,这将导致主 UI 冻结。处理冻结 UI 的最佳方法是线程化方法,或者有时您可以使用调度程序计时器并将方法放入滴答声中。

我不确定这是否会像我从内存中写的那样工作,但如果你要线程化函数,你可以这样做:

    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

上面的代码将在一个独立于 UI 运行的主线程的新线程中执行 setFaxNumber 方法,这意味着它不会阻止任何 UI 加载。

如果您需要更多信息,请询问,我可以将其添加到我的答案中:)

于 2014-07-10T09:12:28.533 回答