Поднять события сервера COM в excel

Я пытаюсь реализовать COM-сервер C #, который вызывает события COM в Excel на основе этого примера: http://msdn.microsoft.com/en-us/library/dd8bf0x3(v=vs.90).aspx

Мой вопрос похож на следующий

Выявление событий COM-сервера C # для клиентских приложений Delphi

Я использую Visual Studio 2015, net 4.5 и Excel 2013

Вот пример тестового кода

namespace XLServer { [ComVisible(true)] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface Events { void NewEvent(); } [ComVisible(true)] [ComSourceInterfaces(typeof(Events))] public class MessageHandler { public delegate void NewEventDelegate(); public event NewEventDelegate NewEvent; public System.Threading.Timer EventTimer; public MessageHandler() { StartEvents(); } public void FireNewEvent() { Debug.Print("Fire New Event"); if (NewEvent != null) NewEvent(); } public void StartEvents() { if (EventTimer == null) EventTimer = new System.Threading.Timer(MessageEvent, null, 1000, 2000); } private void MessageEvent(object o) { FireNewEvent(); } } } 

Вот код VB

 Public WithEvents mh As MessageHandler Public status As String Public Sub Class_Initialize() Set mh = New MessageHandler status = "Initialized" End Sub ' Events and methods are matched by name and signature. Public Sub mh_NewEvent() On Error Resume Next MsgBox ("NewEvent Fired") End Sub 

Я получаю следующую ошибку в методе FireNewEvent при запуске MessageHandler в Excel

 Fire New Event Exception thrown: 'System.Reflection.TargetException' in mscorlib.dll An unhandled exception of type 'System.Reflection.TargetException' occurred in mscorlib.dll Additional information: Object does not match target type. 

Любое предложение будет оценено по достоинству. Благодаря!

Обновить

Проблема связана с использованием System.Threading.Timer.

Он работает правильно при использовании System.Windows.Forms.Timer

 namespace XLServer { [ComVisible(true)] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] public interface Events { void NewEvent(); } [ComVisible(true)] [ComSourceInterfaces(typeof(Events))] public class MessageHandler { public delegate void NewEventDelegate(); public event NewEventDelegate NewEvent; public System.Windows.Forms.Timer EventTimer; public MessageHandler() { StartEvents(); } public void FireNewEvent() { Debug.Print("Fire New Event"); if (NewEvent != null) NewEvent(); } private void StartEvents() { if (EventTimer == null) EventTimer = new Timer(); EventTimer.Interval = 5000; EventTimer.Tick += new EventHandler(timer_Tick); EventTimer.Start(); } private void timer_Tick(object sender, EventArgs e) { FireNewEvent(); } } 

Давайте будем гением компьютера.