зарегистрировать обработчик событий для события Office 2013 в сравнении с 2010 с помощью отражений в С#

У меня есть проект надстройки Outlook 2010, написанный на С# с использованием Visual Studio 2010.

Поскольку надстройка в целом работает в Outlook 2013, я просто хочу внести небольшую модификацию, чтобы предотвратить проблемы с новой функцией InlineResponse в Outlook 2013.

Я хочу зарегистрировать обработчик событий для события InlineResponse без обновления до VS 2012 (из-за удаленного проекта установщика). Я читал об использовании размышлений. чтобы получить новые события.

Я не получаю никаких исключений, но событие не запускает мой обработчик (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");
   }
}

Любые предложения, как я могу добиться желаемого поведения?


person Frederic Klein    schedule 02.05.2013    source источник


Ответы (1)


Гэвин Смит (который написал упомянутый пост об использовании отражений) был так любезен, что дал мне ответ на различия между нашими реализациями:

от Гэвина Смита

Единственная разница, которую я могу заметить между вашим и моим, заключается в том, что OnInlineResponse принимает аргумент, вновь созданный почтовый элемент — см. http://msdn.microsoft.com/en-us/library/office/jj229061 — т. е. мой метод определяется как:

private void OnInlineResponse(object item)
{
  ...
}
person Frederic Klein    schedule 03.05.2013