Мне удалось найти решение.
IHTMLWindow3 имеет метод attachEvent , для которого в качестве первого аргумента требуется имя события (в моем случае - «onscroll»)) и объект, который будет отвечать за обработку событий.Самая хитрая часть связана с этим объектом-обработчиком.Он должен реализовывать интерфейс IDispatch , но IE9 использует этот интерфейс довольно странным образом.Он вызывает IDispatch.Invoke без указания имени метода, который должен быть вызван..NET автоматически реализует IDispatch , когда класс помечен [ClassInterfaceType.AutoDispatch)] и использует отражение для вызова своих методов экземпляра в соответствии с аргументами IDispatch.Invoke .В нашем случае имя метода пустое, поэтому ничего не вызывается [DispId (0)] атрибут позволяет решить эту проблему, он определяет метод, который должен вызываться, если Invoke получает пустое имя метода.
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class EventListener
{
[DispId(0)]
public void HandleEvent(object target)
{
}
}
Следует отметить, что имя обработчикаметод не имеет значения.Но его подпись важна.Например, для события «onscroll» оно должно быть таким, как показано выше, обработчик «onclick» не требует аргументов и т. д.