c#引用的dll回调引用的窗体怎么做?

问题描述

串口在dll里,接收数据后需要回调窗体里的方法并显示数据,怎么回调?先谢了!

解决方案

解决方案二:
函数指针,C#中的委托
解决方案三:
在你的dll里定义一个事件publiceventEventHandlermyevent;在你的窗体中定义回调函数void你的回调函数(objectsender,EventArgse){...}使用dll类型.myevent+=你的回调函数

解决方案四:
事件委托,版主说得对
解决方案五:
问题是那个DLL是不是你写的,如果是你写的,按楼上说的用委托,然后DLL里引发事件。如果不是那就麻烦了,看看那个DLL有没有回调函数。
解决方案六:
人家写的dll吗?他可能写了一个串口类封装起来了有两个办法第一自己写串口功能(蛮简单的)第二你看看他的dll库有没有什么接口,接收完数据肯定有message对吧?看有没有事件触发?如果有像serialport类里面datareceived事件,你订阅此事件,然后对buffer里面数据进行操作,在你的form里面订阅,处理函数就是你要回调的方法,显示就不说了方法多了去了如果帖主还需要继续聊的话,可以私聊加q都行带你解决了你给分就行
解决方案七:
窗体是自己的,dll也是自己的,而且dll下还有dll。不会用啊,用那个delegate,好像dll之间可以,窗体没整上
解决方案八:
请教事件注册为什么会出错//声明关于事件的委托publicdelegatevoiddgCountEventHandler(objectsender,System.EventArgse);//被调用的自己定义的计时类publicclassclsTimer{System.Timers.TimermTimer=newSystem.Timers.Timer(10);//声明事件publiceventdgCountEventHandlerdgeCount;publicclsTimer(){mTimer.Interval=10;mTimer.Elapsed+=newElapsedEventHandler(TimeEvent);}publicvoidsubStart(){mTimer.Enabled=true;}publicvoidsubEnd(){mTimer.Enabled=false;}privatevoidTimeEvent(objectsource,ElapsedEventArgse){//触发事件this.dgeCount(this,newEventArgs());}}//调用那个类的主类publicclassclsLogic{clsPort.clsTimermyTimer=newclsTimer();intintCount=0;publicclsLogic(){//注册事件,但是这里出错,//错误1“clsPort.clsTimer”不包含“dgeCount”的定义,并且找不到可接受类型为“clsPort.clsTimer”//的第一个参数的扩展方法“dgeCount”(是否缺少using指令或程序集引用?)//E:mideaTestsC#TESTthreadTestclsLogicclsLogic.cs2821clsLogic//错误2“clsLogic.clsLogic.myTimer”是“字段”,但此处被当做“类型”来使用//E:mideaTestsC#TESTthreadTestclsLogicclsLogic.cs2837clsLogicmyTimer.dgeCount+=newmyTimer.dgCountEventHandler(onLogic_Count);}publicvoidsubStartTime(){myTimer.subStart();}publicvoidsubEndTime(){myTimer.subEnd();}publicvoidonLogic_Count(objectsender,System.EventArgse){intCount+=1;}}

解决方案九:
注册事件出错,myTimer.dgeCount+=newmyTimer.dgCountEventHandler(onLogic_Count);是我强输入的,根本就没出提示错误1“clsPort.clsTimer”不包含“dgeCount”的定义,并且找不到可接受类型为“clsPort.clsTimer”的第一个参数的扩展方法“dgeCount”(是否缺少using指令或程序集引用?)E:mideaTestsC#TESTthreadTestclsLogicclsLogic.cs2821clsLogic错误2“clsLogic.clsLogic.myTimer”是“字段”,但此处被当做“类型”来使用E:mideaTestsC#TESTthreadTestclsLogicclsLogic.cs2837clsLogic
解决方案十:
不要把代码放在C#Test目录,换到一个没#的目录试试。记得这是某一个版本的VS的Bug,哪个版本记不清了。
解决方案十一:
另外你的这个事件用不着自己定义委托,用现成的EventHandler就好。peventEventHandlerdgeCountublic;还有触发事件时,加上判断:if(dgeCount!=null){dgeCount1(this,newEventArgs());}
解决方案十二:
publiceventEventHandlerdgeCount;
解决方案十三:
引用

clsPort.clsTimermyTimer=newclsTimer();

为什么左边要加上clsPort,右边却没有myTimer.dgeCount+=newdgCountEventHandler(onLogic_Count);dgCountEventHandler既然是写在类外侧,直接用就行了
解决方案十四:
E:mideaTestsC#TESTthreadTestclsLogicclsLogic.cs,把你目录中的C#TEST改成CSharpTest,就是不要包含#号
解决方案十五:
再按正常的变量声明方式声明就可以了clsTimermyTimer=newclsTimer();
解决方案:
找到问题在哪里了,我这两个类是放在不同项目里,那个dll引用后加的自定义事件,忘记编译了
解决方案:
这个委托和自定义事件是刚学习的,才入点门,大家有什么好的学习建议,请指点下
解决方案:
只要看+=这个在哪里,那么事件的真正执行的方法体就在哪里。
解决方案:
帖子有非法词组,只好用图片了。
解决方案:
既然DLL都是自己的,你可要用用反射,估计这个问题就好解决。
解决方案:
voidYourMethod(xxxx,Func<yyy,zzz>func){//balabala你自己应该要执行的代码if(func!=null)//这个是窗体在方法内传入的在你前面的逻辑执行完后,应该要执行的方法{func(mmm);//执行传入的委托,mmm按实际,这里假定mmm是你需要告诉窗体的数据}}

时间: 2024-11-05 08:23:33

c#引用的dll回调引用的窗体怎么做?的相关文章

vb.net-VB.NET引用第三方dll问题

问题描述 VB.NET引用第三方dll问题 情况说明: 1.本人5年码龄,第一次接触VB.NET,可能有不正确的地方. 2.项目类型是VB.NET窗体,只有一个按钮,点击事件为VB初始化dll中的类实例. 3.dll已经注册成功,在项目中引用也可以正常导入,并能定义其中的类对象. 4.但是,在初始化时,会报80040154错误. 经过查找,发现项目属性-引用,列表中的对应dll已经出现,但是它对应的路径是本项目下的obj/debug/interop.xxxx.dll.引入其它系统自带的com类也

求助:VSTO EXCEL插件引用第三方DLL,部署到其它电脑无效

问题描述 引用了一个二维码的DLL(DotNetBarcode),发布后别的电脑安装成功,但只要有引用此DLL的窗体,一律弹不出来.求大神指教. 解决方案 解决方案二:http://club.excelhome.net/thread-893282-1-1.html解决方案三:引用1楼wangnaisheng的回复: http://club.excelhome.net/thread-893282-1-1.html 不行的这个贴看过他是没有引用第三方DLL的解决方案四:http://club.exc

dll-在 v2010中引用某个Dll后 所有.net程序无法运行

问题描述 在 v2010中引用某个Dll后 所有.net程序无法运行 重装的系统及vs2010. 一切正常. 在引用某个从网上下载的mysql.data.dll后,所有的.net程序都无法运行,就像没有安装framework一样. 但用IIS加载.net网页没问题. 运行不了后尝试重装过vs2010,所有framework运行库,重注册dll,都没用. 请问不重装系统怎么破? 解决方案 估计引用dll和你的系统崩溃之间只是巧合.你的系统被流氓软件破坏了. 不重装系统要想解决除非你有足够多的钱和时

C# vs2010 4.0框架,编译生成成功,但是bin文件下面生成不了引用的dll

问题描述 C# vs2010 4.0框架,编译生成成功,但是bin文件下面生成不了引用的dll C# vs2010 4.0框架,编译生成成功,但是bin文件下面生成不了引用的dll 解决方案 右键项目 属性 查看你编译文件存放的路径 Properity--Build--Output path: 解决方案二: 右键查看解决方案在哪个目录,然后查看BIN文件下有没有dll. 或者或者点击方案右上角显示全部文件然后再看看bin下面有没有dll

线程-C# 引用C++ dll的奇怪问题,相当奇怪

问题描述 C# 引用C++ dll的奇怪问题,相当奇怪 项目是做视频监控的,外购的高清摄像头,并提供了C++的dll,项目使用C#做管理平台. 其中dll中有个函数 VCAInitSdk 做初始化用的,即每次打开管理程序,都要调用这个初始化函数. 起初,在WinForm中调用该函数,都可以正常的执行. 当这个函数在 windows service 和控制台应用程序 中运行后报错:[尝试读取或写入受保护的内存.这通常指示其他内存已损坏]也就是说,这个函数在winform中可以使用,但是在windo

求助,Microsoft.WindowsMediaServices类,VS.NET找不到NET版本的,引用WindowsMediaServices.DLL报错

问题描述 最近想做一个WINDOWSMEIDASERVICE的程序开发,看了https://msdn.microsoft.com/en-us/library/ms738748.aspx的提示写代码,但是现在VS.NET2013里面就找不到WINDOWS.MEDIA类,也下载不到.NET2013版本的WindowsMediaServicesSDK,就在项目中直接引用Microsoft.WindowsMediaServices.DLL,然后程序是可以编译通过了,但是在装了WINDOWSMEDIASE

大哥大姐救救我吧,如何让webservices里引用的dll程序调用应用程序里的方法

问题描述 如何让webservices里引用的dll程序调用应用程序里的方法 解决方案 解决方案二:你直接引用了,实例化后就提示它里面的方法了啊解决方案三:实例化之后不久可以调用了,解决方案四:同意楼上解决方案五:ding解决方案六:ding解决方案七:实在不行就regsvr32注册下dll

axwmplib引用-axWMPLib.DLL引用返回类型错误怎么办?

问题描述 axWMPLib.DLL引用返回类型错误怎么办? 我的环境是微软.Net环境下的c#Winform环境,解决方案有4个项目,其中一个是数据库层访问类库,一个是业务层访问类库,一个界面表示层项目.另有一个为安装发布其它三个项目而建的安装项目. 在界面表示层引用了axWMPLib.DLL,用于播放系统中的音视频资源. 我的问题是,前三个项目编译运行都没有任何级别的错误.可是在第四个安装项目生成时总显示: 警告 1 类型库导入程序遇到无有效返回类型的属性 getter"sessionPlay

Asp.Net数据控件引用AspNetPager.dll分页实现代码_实用技巧

1.也许讲解有点初级,希望高手不要"喷"我,因为我知道并不是每一个人都是高手,我也怕高手们说我装13,小生不才: 2.如有什么不对的地方,还希望大家指出,一定虚心学习: 3.本文属于作者原创,尊重他人劳动成果,转载请注明作者,谢谢. 下面开讲: 第一步:首先是下载一个AspNetPager.dll 下载地址 AspNetPager.rar第二步:在项目的bin文件夹下引用AspNetPager.dll 如图: 第三步:在工具箱添加AspNetPager控件,如图: 接下来再如图: 这样