C# - 如何在 outlook [com-addin] 中查找哪个 mailItem 用户正在关闭
C# - How to find which mailItem user is closing in outlook [com-addin]
我目前正在尝试对 mailItem 关闭执行一些操作。 Microsoft ItemEvents_10_Event.Close 事件不提供关闭哪个 mailItem。
如果用户打开了多封电子邮件并关闭了其中一封,我如何才能知道选择了关闭哪个电子邮件项目?是否有任何 属性 表明此邮件项目正在关闭?
//New inspector event:
m_inspectors.NewInspector += m_inspectors_NewInspector;
//Trigerring mailItem close event from the new inspector.
void m_inspectors_NewInspector(Interop.Inspector Inspector)
{
Interop.MailItem me = null;
try
{
me = Inspector.CurrentItem as Interop.MailItem;
if (me != null)
{
((Interop.ItemEvents_10_Event)me).Close += OutlookApp_Close;
//some operations.
}
}
catch
{
}
finally
{
if (me != null)
{
me.ReleaseComObject();
me = null;
}
}
}
//mailItem close event
private void OutlookApp_Close(ref bool Cancel)
{
//here I need to get the exact mailItem that is about to close.
}`
基本上,是否有可能在任何关闭事件中获得准确的 mailItem?
创建一个包装器 class,将 MailItem
作为其构造函数的参数并将其保存在成员变量中。使事件处理程序成为 class 上的方法。当它触发时,您将拥有引用 MailItem
对象的成员变量。
MailItemWrapper wrapper = new MailItemWrapper(me);
...
public class MailItemWrapper
{
private MailItem _mailItem;
public MailItemWrapper(MailItem mailItem)
{
_mailItem = mailItem;
((Interop.ItemEvents_10_Event)_mailItem).Close += On_Close;
}
private void On_Close(ref bool Cancel)
{
MessageBox.Show(_mailItem.Subject);
Marshal.ReleaseComObject(_mailItem);
_mailItem = null;
//todo: if the wrapper is stored in a list, remove self from that list
}
}
我目前正在尝试对 mailItem 关闭执行一些操作。 Microsoft ItemEvents_10_Event.Close 事件不提供关闭哪个 mailItem。
如果用户打开了多封电子邮件并关闭了其中一封,我如何才能知道选择了关闭哪个电子邮件项目?是否有任何 属性 表明此邮件项目正在关闭?
//New inspector event:
m_inspectors.NewInspector += m_inspectors_NewInspector;
//Trigerring mailItem close event from the new inspector.
void m_inspectors_NewInspector(Interop.Inspector Inspector)
{
Interop.MailItem me = null;
try
{
me = Inspector.CurrentItem as Interop.MailItem;
if (me != null)
{
((Interop.ItemEvents_10_Event)me).Close += OutlookApp_Close;
//some operations.
}
}
catch
{
}
finally
{
if (me != null)
{
me.ReleaseComObject();
me = null;
}
}
}
//mailItem close event
private void OutlookApp_Close(ref bool Cancel)
{
//here I need to get the exact mailItem that is about to close.
}`
基本上,是否有可能在任何关闭事件中获得准确的 mailItem?
创建一个包装器 class,将 MailItem
作为其构造函数的参数并将其保存在成员变量中。使事件处理程序成为 class 上的方法。当它触发时,您将拥有引用 MailItem
对象的成员变量。
MailItemWrapper wrapper = new MailItemWrapper(me);
...
public class MailItemWrapper
{
private MailItem _mailItem;
public MailItemWrapper(MailItem mailItem)
{
_mailItem = mailItem;
((Interop.ItemEvents_10_Event)_mailItem).Close += On_Close;
}
private void On_Close(ref bool Cancel)
{
MessageBox.Show(_mailItem.Subject);
Marshal.ReleaseComObject(_mailItem);
_mailItem = null;
//todo: if the wrapper is stored in a list, remove self from that list
}
}