【问题标题】:OCX Event is not fired when parent is not set to a visible form当父级未设置为可见表单时,不会触发 OCX 事件
【发布时间】:2012-08-02 06:38:07
【问题描述】:

我有一个 OCX,我在服务中使用它,但没有可见的表单。 它需要一个表单作为父级,否则它的事件不会被触发 如何让 ocx 处理消息并触发事件?

这是我的代码:

public AxKylixSMS SMS;

SMS = new AxKylixSMS();            

SMS.CreateControl();

SMS.NewDeliveryReport += new   _DKylixSMSEvents_NewDeliveryReportEventHandler(OnDeliveryReport);

OnDeliveryReport 事件未触发。我该如何解决这个问题?

【问题讨论】:

  • 几乎所有 ActiveX 控件都需要一个宿主窗口才能激活。不托管它的典型故障模式是它拒绝引发事件。 Application.Run() 启动的消息循环也很关键。你可以隐藏它所在的窗口,见stackoverflow.com/a/3742980/17034

标签: c# events service ocx


【解决方案1】:

使用它来引用您的表单 试试:

public AxKylixSMS SMS;

SMS = new AxKylixSMS();            

SMS.CreateControl();

SMS.NewDeliveryReport += new   _DKylixSMSEvents_NewDeliveryReportEventHandler(this.OnDeliveryReport);

【讨论】:

  • 使用“this”关键字没有区别。当设置了作为父级的表单时触发该事件,使用相同的代码并且顺便说一下没有表单。
  • 你使用了一个ocx,但是这个ocx嵌入了一个服务,请问什么服务?
  • 不,我正在编写一个 Windows 服务,并在该服务中使用 OCX。
【解决方案2】:

通常 ocx 可以在 winform 上工作,但在您的上下文中,您可以使用 EventLog 在 Windows 服务和 winform 之间进行通信,两者均可访问: 这里有一个样本 http://www.codeproject.com/Articles/4857/A-realtime-event-log-monitoring-tool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多