问题根本原因:
当Outlook应用程序正在运行时,无法使SelectNamesDialog显示在GUI上。
我的解决方法:
我尝试通过打开和关闭Mailitem来触发Outlook事件,然后显示SelectNamesDialog。现在它出现在我们的GUI上。
目前面临的问题:
只有在Outlook应用程序正在运行时才应在显示SelectNamesDialog之前打开和关闭Mailitem。如果它没有运行,则可以直接显示SelectNamesDialog。
if (msOutlook == true)
{
Microsoft.Office.Interop.Outlook.MailItem oMailItem = (Microsoft.Office.Interop.Outlook.MailItem)app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
oMailItem.Display(false);
oMailItem.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
}
bool isDisplayed = SelectNamesDialog .Display();
Microsoft.Office.Interop.Outlook.Recipients recipients = SelectNamesDialog .Recipients;
if (recipients.Count > 0)
{----
}
为了确定Outlook应用程序是否正在运行,我使用Process.GetProcesses()。当进程正在运行时,msOutlook为真。
如果Outlook没有运行且第一次单击显示按钮,则msOutlook为false,并且snd.Display()将被执行,它可以正常工作。但是,当SelectNamesDialog关闭后,Outlook进程并不会立即结束。只有过了一段时间后,Outlook进程才会结束。因此,如果用户立即第二次单击显示按钮,即使在他的系统中没有打开Outlook应用程序,该进程也将处于“运行”状态,msOutlook将为true。
现在,下面的行的执行将抛出COMException异常
Microsoft.Office.Interop.Outlook.Recipients recipients = SelectNamesDialog .Recipients;
if (recipients.Count > 0)
{----
-----
}
Text:
System.Runtime.Interopservices.COMException
{"The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))"}
outlook.Quit()
,但很难确定这是否是你的问题。 - Enigmativity