如何处理事件:使用c sharp(旧的com控件)的控件数组
本文关键字:控件 com 旧的 数组 sharp 处理事件 使用 | 更新日期: 2023-09-27 18:06:01
我正在尝试使用旧的com控件(控件数组),以下示例:5435293,39541,5497403,5738092解释(或至少是我所理解的)如何处理控件数组与。net控件的事件,所以他们有Sender和EventArgs。
我的问题是:如何处理旧的com控制数组的事件?.
编辑:数组将在开始时动态创建,例如:Q.你想要多少个连接?5 a .
的例子:控件有以下事件:control_connected(int status, string description)
我可以用相同的参数做一些函数,并将其分配给连接的事件,但我不知道如何用控制数组来做。
非常感谢你的帮助,很抱歉我的英语很糟糕…我不太会说英语COM事件有不同的模态,每个事件没有一个处理程序,您有一个事件接收器对象,该对象挂钩COM服务器计划引发的每个事件。如果您只是将ActiveX事件与委托挂钩,则将创建事件接收器rcw,并可能在稍后导致崩溃,因此我假设您正在创建自己的事件接收器类。
由于您有自己的事件接收类,因此必须遵循事件发布者的事件签名。签名没有sender参数,因为COM服务器假定您有对发送方的引用,因此不需要在每次引发事件时再次发送它。
当然,您可以在事件接收对象中缓存服务器的引用以供以后使用。您的事件接收对象可以使用sender参数声明其自己的托管事件版本,并在引发事件时将缓存的COM服务器作为sender参数传递。
比如
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[TypeLibType(TypeLibTypeFlags.FHidden)]
[Guid("eventGuid")]
[CLSCompliant(false)]
public interface IEvent
{
[DispId(123)]
void control_connected(int status, string description);
}
public class EventSink:IEvent
{
object control;
public EventSink (object control)
{
this.control=control;
}
public event EventHandler<ControlConnectedEventArgs> ControlConnected;
void control_connected(int status, string description);
{
EventHandler<ControlConnectedEventArgs> temp=this.ControlConnected;
if(temp!=null)
temp(this.control, new ControlConnectedEventArgs(status,description));
}
}
如果您有一个COM服务器数组,只需声明一个事件接收器数组,使用ConnectionPointCookie将每个接收器连接到每个COM服务器,并从事件接收器而不是COM服务器连接事件处理程序