我正在构建一个小的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;
}
}
函数开始调用一个非常长的方法,然后每隔几分钟引发一次事件,并将信息发送回javascript。
我似乎不明白为什么它不起作用。缺少什么?很抱歉,如果问题不清楚,我得到的错误也不清楚,所以只要问,我会完善问题。