Я строю небольшой элемент управления ActiveX. Я понял, что activex не может напрямую вызывать функцию javascript, но ему нужно работать через события. Поэтому я создал событие, скопированное из примера кода из codeproject.
Кажется, что событие работает только при определенных обстоятельствах: оно работает, когда вызывается функция javascript, которая немедленно вызывает событие. Это не работает, когда моя функция javascript вызывает метод activex, который выполняет длинную операцию и только затем вызывает событие, вот пример того, что я имею в виду:
Событие Activex:
[Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ControlEvents
{
//Add a DispIdAttribute to any members in the source interface to specify the COM DispId.
[DispId(0x60020001)]
void OnClose(string redirectUrl); //This method will be visible from JS
}
Пример вызова, который работает:
[ComVisible(true)]
public void Close()
{
if (OnClose != null)
{
OnClose("my test"); //Calling event that will be catched in JS
}
else
{
MessageBox.Show("No Event Attached"); //If no events are attached send message.
}
}
Пример сбоя вызова:
[ComVisible(true)]
public void Open()
{
try
{
Start();
}
catch (Exception e)
{
throw e;
}
}
С помощью функции Start вызывайте очень длинный метод, который, в свою очередь, вызывает события раз в несколько минут и отправляет информацию обратно в javascript.
Кажется, я не понимаю, почему это не сработает. Чего не хватает? Извините, если вопрос не ясен, ошибка, которую я получаю, тоже не ясна, поэтому просто задайте вопрос, и я уточню вопрос.