【问题标题】:vb.net Reference Assembly WithEvents not workingvb.net 参考程序集 WithEvents 不起作用
【发布时间】:2012-10-23 15:46:26
【问题描述】:

我一直在寻找这个问题,但无法找到答案,所以任何帮助都将不胜感激!

我最初是通过 .asp 页面将此 dll 用作 activeX 控件,它运行良好。我现在不得不重写它作为一个班级,因为我的老板也问过我。所以在我的项目中,我右键单击并添加了引用 name.dll。它的 FileType 是 Assembly。

所以我创建了一个变量

Friend WithEvents scan As name.Integration.ActiveX.ActiveXObject

有了这个,我可以调用它的方法,并且在这一点上它工作得很好。但是,在我调用一个方法后,它会运行一个进程并开始等待将卡插入扫描仪。当卡片插入扫描仪时,它会抛出一个事件,然后开始扫描。

一旦我插入一张卡片,它就会扫描,但我遇到的问题是我的程序没有捕捉到它抛出的 50 个事件中的任何一个。有谁知道如何或为什么?我迫切需要解决这个问题。

【问题讨论】:

  • 是一个使用“handles scan.”的函数吗?
  • 这几乎总是需要一个消息循环。从 Winforms 或 WPF 应用程序获得的那种。需要 Application.Run()。
  • 我从未使用过 WPF,但我知道有一个我调用的函数可以启动软件。它被称为初始化。一旦我这样做了,软件就会根据需要开始监听和触发事件。
  • @SpectralGhost 它正在使用句柄 scan.Event。抱歉,我最初回复时没有看到您的评论。

标签: .net vb.net visual-studio-2012 .net-assembly activexobject


【解决方案1】:

如果我对您的理解正确(并且我在字里行间阅读),那么您有一个来自第三方的 ActiveX 控件。您之前的网页使用了此控件。您现在改为引用包含 ActiveX 控件的 dll,因此 VS 会自动在 ActiveX 组件周围创建一个 .net 包装器。对吗?

如果是,请确认您从正确的库中引用了正确的类型。

  1. 使用对象浏览器查看 dll 的类型。我想你会发现你有两个与 dll 关联的库。例如,假设您的库被命名为“第三方”。您可能会看到“AxThirdParty”以及“Interop.ThirdParty”。 “互操作”库包含大多数类。但是,“Ax...”库是处理事件的关键。您声明事件的对象来自此库。如果您没有看到这个库,您可能需要将控件添加到 Windows .net 表单中,以让 VS 为您创建它。

  2. 不要尝试处理“Ax...”库中隐藏的事件。请注意,处理隐藏事件不会导致编译错误,但也不会引发它们。您是否在“Ax...”库中看到您尝试处理的事件?如果是这样,它是否以浅灰色显示?请注意,VS 将重命名任何与标准控制事件冲突的互操作事件。例如,ActiveX 控件的单击事件被命名为“ClickEvent”,它是您要处理的 ClickEvent 事件,而不是 Click 事件。

请注意,以上适用于 Windows 窗体。我认为 Hans 对消息循环的看法是正确的。

【讨论】:

  • 是的,ActiveX 文件是第 3 方。现在,如果文件类型说它是一个程序集文件,这有关系吗?互操作版本也不存在。唯一存在的文件是 name.integration.ActiveX。这是我必须下载的唯一文件。我应该使用 Windows 窗体并将 activeX 文件拖到那里,还是因为它们被隐藏了,所以它们永远不会调用我的事件处理程序?
  • 这很奇怪,当我执行整个 WithEvents 时,我得到了 OnSchemeComplete 事件。但是当我在.net Reflector中搜索它时,它被称为schemeComplete。我应该看看我是否能找到如何捕获 SchemeComplete 吗?
  • 当然我不熟悉你的控制。通常,我希望名为“OnSchemeComplete”的东西是基类的可覆盖方法,而不是事件。如果您能提供相关代码可能会有所帮助...
  • 另外,请提供有关 ActiveX 的更多信息。您是否从引用对话框的 .NET 或 COM 选项卡将它添加到您的项目中?如果是 COM 选项卡,您可能需要与您的供应商确认他们的东西可以与 .net 一起使用。
  • 好吧,我无法编写代码,因为我无权访问该事件,所以我还没有编写任何代码。该事件是由我在左上角的下拉菜单中选择创建的,选择使用 WithEvents 创建的变量,然后在右上角的下拉菜单中选择它的 50 个事件之一,即 OnSchemeComplete。和.net explorer(允许我查看dll)将其显示为一个事件。也没有。我只是引用它,因为它不是一个窗口窗体应用程序。但话虽如此,我可以在 .net 框架组件下找到它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
相关资源
最近更新 更多