我有一个使用Visual Studio 2010用C#编写的Outlook 2010加载项项目。
由于加载项在Outlook 2013中整体运行,我只想稍作修改,以防止Outlook 2013中新的InlineResponse功能出现问题。
我想为InlineResponse事件注册一个eventhandler而不升级到VS 2012(因为删除了安装程序项目)。我读到了使用reflections 来获取新事件。
我没有任何异常,但事件不会触发我的处理程序(OnInlineResponse未被调用)。
public partial class ThisAddIn
{
Outlook.Explorer _explorer;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_explorer = Application.ActiveExplorer();
AddInlineResponseHandler();
}
private void AddInlineResponseHandler()
{
var einfo = _explorer.GetType().GetEvent("InlineResponse", BindingFlags.Public | BindingFlags.Instance);
if (einfo != null)
{
var handler = Delegate.CreateDelegate(einfo.EventHandlerType, this, this.GetType().GetMethod("OnInlineResponse", BindingFlags.NonPublic | BindingFlags.Instance), false);
einfo.AddEventHandler(_explorer, handler);
}
}
private void OnInlineResponse()
{
System.Windows.Forms.MessageBox.Show("InlineResponse");
}
}
有关我如何达到预期行为的任何建议吗?
答案 0 :(得分:1)
Gavin Smyth(撰写提到的关于使用反射的帖子)非常友好地回答了我们实现之间的差异:
我可以在你和我之间发现的唯一区别是OnInlineResponse接受一个参数,即新创建的邮件项目 - 请参阅http://msdn.microsoft.com/en-us/library/office/jj229061 - 即我的方法定义为:
private void OnInlineResponse(object item) { ... }