.NET调用COM组件,无法接收COM组件消息问题

问题描述

我这有一个用VB.NET写的winform程序,其中引用了一个COM组件,由VS2005自动导入类型库COM对象创建、订阅COM事件与COM调用都是在一个STA子线程中执行,问题是无法接收到COM消息,如果上面的过程都在UI线程是可以的不知道是什么原因

解决方案

解决方案二:
相关代码如下:ImportsEMPPLibPublicClassMainFormPrivateSubbtnConnect_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnConnect.ClickDimthreadAsNewThreading.Thread(AddressOfWorkThread)thread.SetApartmentState(Threading.ApartmentState.STA)thread.IsBackground=Truethread.Start()EndSubPrivateSubWorkThread()DimsmsObjAsEmptclsmsObj=NewEmptcl()'预订COM组件事件AddHandlersmsObj.EMPPConnected,AddressOfOnConnect'能接收到事件消息AddHandlersmsObj.SubmitResp,AddressOfOnSubmitResp'不能接收到事件消息AddHandlersmsObj.StatusReceivedInterface,AddressOfOnReportStatus'不能接收到事件消息'以下为伪代码smsObj.connect()DoWhileworkingsmsObj.submit(msg)'提交信息至网关后,正常情况都能接收到COM组件的SubmitResp消息Threading.Thread.Sleep(1000)LoopEndSubPrivateSubOnConnect()Debug.WriteLine(String.Format("*****{0}连接成功",Now))EndSubPrivateSubOnSubmitRespInterface(ByValsmAsSMS.SubmitResp)SelectCasesm.ResultCase0Debug.WriteLine(String.Format("*****{2}提交成功:{0}MsgID:{1}",sm.SequenceID,sm.MsgID,Now))CaseElseDebug.WriteLine(String.Format("*****{2}提交失败:{0}Error:{1}",sm.SequenceID,sm.Result,Now))EndSelectEndSubPrivateSubOnReportStatus(ByValsmAsSMS.StatusReport)Debug.WriteLine(String.Format("*****{3}状态报告:{0}MsgID:{1}Status:{2}",sm.SeqID,sm.MsgID,sm.Status,Now))EndSub
解决方案三:
ImportsEMPPLibPublicClassMainFormPrivateSubbtnConnect_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnConnect.ClickDimthreadAsNewThreading.Thread(AddressOfWorkThread)thread.SetApartmentState(Threading.ApartmentState.STA)thread.IsBackground=Truethread.Start()EndSubPrivateSubWorkThread()DimsmsObjAsEmptclsmsObj=NewEmptcl()'预订COM组件事件AddHandlersmsObj.EMPPConnected,AddressOfOnConnect'能接收到事件消息AddHandlersmsObj.SubmitResp,AddressOfOnSubmitResp'不能接收到事件消息AddHandlersmsObj.StatusReceivedInterface,AddressOfOnReportStatus'不能接收到事件消息'以下为伪代码smsObj.connect()DoWhileworkingsmsObj.submit(msg)'提交信息至网关后,正常情况都能接收到COM组件的SubmitResp消息Threading.Thread.Sleep(1000)LoopEndSubPrivateSubOnConnect()Debug.WriteLine(String.Format("*****{0}连接成功",Now))EndSubPrivateSubOnSubmitRespInterface(ByValsmAsSMS.SubmitResp)SelectCasesm.ResultCase0Debug.WriteLine(String.Format("*****{2}提交成功:{0}MsgID:{1}",sm.SequenceID,sm.MsgID,Now))CaseElseDebug.WriteLine(String.Format("*****{2}提交失败:{0}Error:{1}",sm.SequenceID,sm.Result,Now))EndSelectEndSubPrivateSubOnReportStatus(ByValsmAsSMS.StatusReport)Debug.WriteLine(String.Format("*****{3}状态报告:{0}MsgID:{1}Status:{2}",sm.SeqID,sm.MsgID,sm.Status,Now))EndSubEndClass
解决方案四:
没人直到吗?还是这问题太简单了?我好急啊。。。

时间: 2024-10-18 16:36:20

.NET调用COM组件,无法接收COM组件消息问题的相关文章

Android组件系列----Android Service组件深入解析

[前言] 花了周末两天的时间,整理了一下作为Android四大组件之一的Service的基础知识,通过这篇文章,应该可以明白:对Service的理解.在什么地方使用.怎么使用.要注意哪些问题等. [本文主要内容] 一.Service的基本概念(四大组件之一)二.定义(启动)一个Service 1.如何定义(启动)一个Service: 2.停止一个started服务有两种方法 3.onStartCommand方法的返回值 三.IntentService 1.IntentService的引入 2.I

com组件-C#引用COM组件缺失了某些方法

问题描述 C#引用COM组件缺失了某些方法 亲们,我在C#中调用了一个软件的COM组件,但是在C#中引用COM组件生产的Interop中缺失了原来COM组件中的某些方法,这是怎么回事?该如何解决呢?

详解免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)_实用技巧

很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel报表,并且在后台调用Microsoft Excel ActiveX更有效率;从Office文档中提取文本,以帮助您实现全文索引功能(大多数时候,此功能用于创建搜索引擎): 从Office文档提取图像: 生成包含公式的Excel工作表.  一.NPOI组件概述: NPOI是完全免费使用: 涵盖Exce

走近Flex组件系列(四):分组组件(Box)、分割组件(DividedBox)和容器组件

走近Flex组件系列(四):分组组件(Box).分割组件(DividedBox)和容器组件(Panel) 本文主要介绍Flex的Box,DividedBox和Panel组件的应用. 一.分组组件(Box) Flex中Box组件分两种,即VBox和HBox,也就是水平分组布局和垂直分组布局.下面对这两中分别进行介绍. Flex的VBox组件可以自动的帮助开发人员在界面布局的时候进行水平分组,所谓的分组也就是他会自动将放置在其内部的其他组件进行水平布局放置,如下mxml代码: 1 <mx:HBox

图片-android 请问这种系统指令是什么指令,如何调用它,和接收返回结果

问题描述 android 请问这种系统指令是什么指令,如何调用它,和接收返回结果 这张图是领导提供的指令表,说这些功能安卓系统已经实现了,只需要通过程序来调用这些指令,来实现检测功能,网上查了很久,也没查出头绪,我是android新手,有没有高手给点详细的解答 解决方案 http://blog.csdn.net/jumping_android/article/details/7397794 解决方案二: 参考android 发送AT命令 发送 void Send(String file, Str

详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)_实用技巧

在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文档操作的需求,开发者较多的会使用到微软自行提供的插件,在一定程度上简化了开发人员的工作量,但是同时也给用户带来了一些困扰,例如需要安装庞大的office,在用户体验性就会降低很多,并且在国内,很多人都还是使用wps,这就导致一部分只安装了wps的使用者很是为难,在对Excel的操作方面,有一个NPO

详解高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)_实用技巧

在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是"这个系统似乎就是专门操作文档的".毕竟现在的很多办公中大都是在PC端操作文档等软件,在这些庞大而繁重的业务中,单单依靠人力去做文档的操作需要的代价是巨大的,比如数据统计,数据分析等业务要求.这就需要我们在开发系统时,应该尽量减少使用者的一些工作量,例如将数据直接写入文档,获取网页信息后直接存为PDF保存,以便以后继续查看.软件开发的目地是对使用者便捷,但这一要求未必对开发者来说也是便捷的. 在前面介

浅析Bootstrap缩略图组件与警示框组件_javascript技巧

Bootstrap简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 缩略图组件 缩略图在网站中最常用的就是产品列表页面,一行显示几张图片,有的在图片底下带有标题.描述内容.按钮等信息. bootstrap框架将这部分独立成一个模块组件,通过类名.thumbnail配合bootstrap的网格系统来实现.下面是bootstrap缩略图组件不同版本的源码文件: L

windows 8如何打开计算器组件?win8打开计算器组件的方法

方法一: 1. 我们进入到win8的Metro界面中然后右击桌面在点击[所有应用]. 计算器组件?win8打开计算器组件的方法-windows 打开计算器">  2. 之后我们再点击[Windows附件]下面的[计算器]即可打开计算器组件,如下图所示.    方法二: 1. 我们快速在键盘中我们按下[WIN]+[Q]然后我们在弹出直接输入[计算器].    2. 然后点击搜索出来的[计算器]即可打开计算器功能,如下图所示.