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