博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步导致UI句柄增加的解决办法
阅读量:6291 次
发布时间:2019-06-22

本文共 594 字,大约阅读时间需要 1 分钟。

在很多操作中,都会使用到异步线程,具体怎样使用在这不说了,网上有很好的说明;本人通过Delegate.BeginInvoke实现异步调用,完成后对UI控件进行设值等,还有System.Timers.Timer都一样,使用的是线程池的线程。

在异步线程的执行方法中,如果直接使用Control.Invoke转到当前的工作线程,然后设置UI控件的值,完成后继续执行异步线程未完成的代码,不知道是异步线程没有被及时回收,还是别的原因,UI的句柄(可能是一个指针引用),在任务管理器中不断增加。应该是没有回收完成的异步线程的原因。如果使用Timer的Elapsed事件,好像是没有减少的,可能是Timer为全局性的吧,不去考究了。如果是使用new MethodInvoker().BeginInvoke的调用,过一段时间,句柄会减少(回收了)。

具体的解决办法:使用Control.BeginInvoke方法(如果需要同步控件及返回值的不能用些方法),Control.BeginInvoke的线程和上异步线程成了并行执行。是没有任何关系的两个线程了,测试表明,句柄没有增加,至于内存增加,是回收机制还没有执行所致(Event引起的内存泄露不能算,要处理),

转载于:https://www.cnblogs.com/Yjianyong/archive/2012/02/01/2334899.html

你可能感兴趣的文章
技术人员的焦虑
查看>>
js 判断整数
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>