BeginInvoke分析

在异步接收时,使用了BeginInvoke调用主线程中的处理函数,假如主线程中处理函数时间很长,会出现什么情况呢?

进行了一次测试:每秒发送一个数据包,在收到数据包时,记录时间,并传递这个时间到处理函数,而处理函数中会sleep3秒,结果如下:

调用处理22:04
处理:22:04
调用处理22:05
调用处理22:06
处理:22:05
调用处理22:07
调用处理22:08
调用处理22:09
处理:22:06
调用处理22:10
调用处理22:11
调用处理22:12
处理:22:07
调用处理22:13
调用处理22:14
调用处理22:15
处理:22:08
调用处理22:16
调用处理22:17
调用处理22:18
线程 0x988 已退出,返回值为 0 (0x0)。
处理:22:09
调用处理22:19
调用处理22:20
调用处理22:21
处理:22:10
调用处理22:22
调用处理22:23
调用处理22:23
调用处理22:24
处理:22:11
调用处理22:25
调用处理22:26
调用处理22:27
调用处理22:28
处理:22:12
处理:22:13
处理:22:14
处理:22:15
处理:22:16
处理:22:17
线程 0x5f4 已退出,返回值为 0 (0x0)。
处理:22:18
处理:22:19
处理:22:20
处理:22:21
处理:22:22
处理:22:23
处理:22:23
处理:22:24
处理:22:25
处理:22:26
处理:22:27
处理:22:28

结论:异步处理函数中,使用BeginInvoke调用主线程处理,将不会影响到数据的接收(每秒的数据都会被收到)。但异步方式调用的接收处理会处于控件消息队列中,必须按顺序逐条执行。

原文地址:https://www.cnblogs.com/jetz/p/1780621.html