Как получать события COM из Silverlight?

Я хочу вызвать событие из класса .NET и получить это событие в коде Silverlight (вне браузера, с использованием поддержки взаимодействия COM, добавленной в SL4).

Может кто-нибудь указать проблема в моем коде? Возможно, мне нужно сделать больше шаблонно оформленного интерфейса, чтобы это работало?

Код:

Вместо того, чтобы писать собственный COM-код, я пишу .NET-код и выставляю его с помощью COM-взаимодействия.

Мой класс .NET для сбора событий выглядит следующим образом:

using System;

namespace TestComInterop2 {
  public class TestClass {
    public event EventHandler TestEvent;
    public void Fire() {
      if (TestEvent != null)
        TestEvent(this, EventArgs.Empty);
    }
  }
}

Мой клиентский код SL4 выглядит следующим образом:

...

private delegate void HandlerDelegate(dynamic sender, dynamic eventArgs);

private void TestEventSinking(object sender, RoutedEventArgs e)
{
  // Create instance of COM-registered .NET class
  var testClass = AutomationFactory.CreateObject("TestComInterop2.TestClass");

  // Subscribe to event (second line fails with System.Exception)
  //
  //    "Failed to add event handler. Possible reasons include: the object does not
  //    support this or any events, or something failed while adding the event."
  //
  AutomationEvent testEvent = AutomationFactory.GetEvent(testClass, "TestEvent");
  testEvent.AddEventHandler(new HandlerDelegate(HandleTestEvent));

  // Fire the event
  testClass.Fire();
}

private void HandleTestEvent(object sender, object eventargs)
{
  MessageBox.Show("Event fired");
}

...
1
задан mackenir 25 August 2010 в 10:13
поделиться