Как убрать COM события из Silverlight? - PullRequest
1 голос
/ 25 августа 2010

Я хочу вызвать событие из класса .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 Ответ

2 голосов
/ 25 августа 2010

Используйте атрибут [ComSourceInterface] в вашем классе. Соответствующая тема библиотеки MSDN находится здесь .

...