异步导致UI句柄增加的解决办法
在很多操作中,都會使用到異步線程,具體怎樣使用在這不說了,網上有很好的說明;本人通過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
總結
以上是生活随笔為你收集整理的异步导致UI句柄增加的解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吉首大学2019年程序设计竞赛-F 天花
- 下一篇: Django操作与内容