如何用事件和委托来进行监控数据传输进来

yjq92 2017-10-31 05:37:48
如题,第二张图的OnSend和OnReceive事件下面有绿色的波浪线,提示没有被用到,我想问一下怎么去调用这两个事件来监控数据到达,然后执行OnReceive函数进行接收数据?



...全文
551 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjq92 2017-11-02
  • 打赏
  • 举报
回复
引用 15 楼 hanjun0612 的回复:
[quote=引用 11 楼 yjq92 的回复:] 这个例子的被监视对象PetTracker有判断条件if (distance > 100),而实际我的判断条件是if(有数据传输进来了?),可是就是不懂怎么设置这个条件,请赐教。
那就在你传递数据的时候,调用一下事件。[/quote] 传递数据在另一边,什么时候发送数据过来不确定的,所以只能从判断是否有数据过来入手,但是又不知道怎么判断
正怒月神 2017-11-01
  • 打赏
  • 举报
回复
你可以看一下观察者模式。
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
OnSend和OnReceive事件下面有绿色的波浪线,提示没有被用到 -》事件需要“触发”才能被订阅者获取到。 第一张图已经订阅,但不是太完美,应该在+=之前进行-= 。 或者在form的关闭事件中进行-=操作,要移除无用的自定义事件订阅,因为垃圾回收器不会对它们进行回收,直到进程结束。 第二张图中要有一个函数来“触发”事件,类似:

EventHandler handler = OnSend;
            if (handler != null)
                handler(this, null);
1、第一张图如果要改,那么-=的右边填什么? 2、第二张图的新建函数来调用事件是怎么样新建都行的吗?参数有什么限制吗,还有新建在哪合适呢?
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
if (OnSend != null)
        {
            OnSend(如果有参数);
         }
另一个同样
建立两个函数去分别调用这两个事件,那么这两个新建立的函数应该放在什么地方呢?是在第二张图的两个事件下面吗?
exception92 2017-11-01
  • 打赏
  • 举报
回复
OnSend和OnReceive事件下面有绿色的波浪线,提示没有被用到
-》事件需要“触发”才能被订阅者获取到。 第一张图已经订阅,但不是太完美,应该在+=之前进行-= 。 或者在form的关闭事件中进行-=操作,要移除无用的自定义事件订阅,因为垃圾回收器不会对它们进行回收,直到进程结束。 第二张图中要有一个函数来“触发”事件,类似:

EventHandler handler = OnSend;
if (handler != null)
handler(this, null);

xdashewan 2017-11-01
  • 打赏
  • 举报
回复
if (OnSend != null)
        {
            OnSend(如果有参数);
         }
另一个同样
正怒月神 2017-11-01
  • 打赏
  • 举报
回复
引用 11 楼 yjq92 的回复:
这个例子的被监视对象PetTracker有判断条件if (distance > 100),而实际我的判断条件是if(有数据传输进来了?),可是就是不懂怎么设置这个条件,请赐教。
那就在你传递数据的时候,调用一下事件。
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 13 楼 xdashewan 的回复:
[quote=引用 12 楼 yjq92 的回复:] 不太懂前半段话的意思(如果无条件触发,那么你监控OnReceive就能实现接收数据的监控),如果不知道具体的触发条件是什么,怎么实现?
你程序总有一个接收底层的,例如c#的socket类的datareceive事件等,然后在底层接收后,是否会过滤掉一些数据再触发OnReceive事件,还是无论接收到什么都会触发OnReceive事件这就是区别[/quote] 还有这样的呀,长知识了,同时也不好办了,我那个是snap7通信,只知道一个接收函数API,研究snap7通信的人及其少,资料也少得可怜,很难走得通呀,还是谢谢你啦,非常感谢!!!
xdashewan 2017-11-01
  • 打赏
  • 举报
回复
引用 12 楼 yjq92 的回复:
不太懂前半段话的意思(如果无条件触发,那么你监控OnReceive就能实现接收数据的监控),如果不知道具体的触发条件是什么,怎么实现?
你程序总有一个接收底层的,例如c#的socket类的datareceive事件等,然后在底层接收后,是否会过滤掉一些数据再触发OnReceive事件,还是无论接收到什么都会触发OnReceive事件这就是区别
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 10 楼 xdashewan 的回复:
[quote=引用 9 楼 yjq92 的回复:] Partner.OnReceive += new S7PartnerEvent.OnReceiveEventHandler(OnReceive);其中Partner.OnReceive是接收事件,最后面括号里的OnReceive就是具体的接收函数,理论上是执行某些条件,满足后就触发接收事件,然后自然而然就执行了接收函数,可是不知道要设置什么条件来判断是否有数据进来?可以具体点说一下吗?
那么你就需要知晓OnReceive这个事件何时触发,是否是有条件触发,如果无条件触发,那么你监控OnReceive就能实现接收数据的监控,如果OnReceive触发是有条件的,那么就要监控OnReceive触发的那个方法,甚至更之前的方法[/quote] 不太懂前半段话的意思(如果无条件触发,那么你监控OnReceive就能实现接收数据的监控),如果不知道具体的触发条件是什么,怎么实现?
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
你可以看一下观察者模式。

看过后也大致理解一些,其中有一个例子也很简单:



这个例子的被监视对象PetTracker有判断条件if (distance > 100),而实际我的判断条件是if(有数据传输进来了?),可是就是不懂怎么设置这个条件,请赐教。
xdashewan 2017-11-01
  • 打赏
  • 举报
回复
引用 9 楼 yjq92 的回复:
Partner.OnReceive += new S7PartnerEvent.OnReceiveEventHandler(OnReceive);其中Partner.OnReceive是接收事件,最后面括号里的OnReceive就是具体的接收函数,理论上是执行某些条件,满足后就触发接收事件,然后自然而然就执行了接收函数,可是不知道要设置什么条件来判断是否有数据进来?可以具体点说一下吗?
那么你就需要知晓OnReceive这个事件何时触发,是否是有条件触发,如果无条件触发,那么你监控OnReceive就能实现接收数据的监控,如果OnReceive触发是有条件的,那么就要监控OnReceive触发的那个方法,甚至更之前的方法
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 8 楼 xdashewan 的回复:
[quote=引用 7 楼 yjq92 的回复:] 其实主要的难点在于不知道被监视者是谁,它是局域网传输数据的,不知道监控什么对象(不像有串口那样监控串口对象就行),所以我想请教一下,一般局域网数据传输,监控是否有数据过来,应该监控什么变量或者对象啥的呀?(目前只有对应的接收函数的API接口)
监控接收事件是完全正确同时也是推荐的做法[/quote] Partner.OnReceive += new S7PartnerEvent.OnReceiveEventHandler(OnReceive);其中Partner.OnReceive是接收事件,最后面括号里的OnReceive就是具体的接收函数,理论上是执行某些条件,满足后就触发接收事件,然后自然而然就执行了接收函数,可是不知道要设置什么条件来判断是否有数据进来?可以具体点说一下吗?
xdashewan 2017-11-01
  • 打赏
  • 举报
回复
引用 7 楼 yjq92 的回复:
其实主要的难点在于不知道被监视者是谁,它是局域网传输数据的,不知道监控什么对象(不像有串口那样监控串口对象就行),所以我想请教一下,一般局域网数据传输,监控是否有数据过来,应该监控什么变量或者对象啥的呀?(目前只有对应的接收函数的API接口)
监控接收事件是完全正确同时也是推荐的做法
yjq92 2017-11-01
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
[quote=引用 3 楼 yjq92 的回复:] 建立两个函数去分别调用这两个事件,那么这两个新建立的函数应该放在什么地方呢?是在第二张图的两个事件下面吗?
这取决于你的逻辑,在必要的地方触发事件,处理OnSend或OnReceive的逻辑[/quote 其实主要的难点在于不知道被监视者是谁,它是局域网传输数据的,不知道监控什么对象(不像有串口那样监控串口对象就行),所以我想请教一下,一般局域网数据传输,监控是否有数据过来,应该监控什么变量或者对象啥的呀?(目前只有对应的接收函数的API接口)
xdashewan 2017-11-01
  • 打赏
  • 举报
回复
引用 3 楼 yjq92 的回复:
建立两个函数去分别调用这两个事件,那么这两个新建立的函数应该放在什么地方呢?是在第二张图的两个事件下面吗?
这取决于你的逻辑,在必要的地方触发事件,处理OnSend或OnReceive的逻辑

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧