理解上述原因,需先搞清楚Winform线程机制。主要有以下2点特性:1.单线程模型;2.依赖消息循环。
1.单线程模型
Winform 默认是单线程。通常,所有的UI操作,包括控件更新、事件处理,都由主线程管理(也就是UI线程)。
任何在事件处理程序中运行的代码都会占用主线程。如果某个事件中有耗时很多的操作,就会阻塞线程。比如有时PictureBox.Image的显示会滞后。
下面代码中,pictureBox1的显示会有滞后。背后的工作原理是:
“pictureBox1.Image = image0”运行完成后,系统只是将 pictureBox1 的 Image 属性更新,但不会立即触发控件绘制。(实际的绘制操作是由消息循环处理的,在 WM_PAINT 消息中完成)
pictureBox1的属性设置之后,如果紧接着有耗时操作占用UI线程,就会导致WM_PAINT无法及时处理,所以不能及时绘制。
最佳解决办法:
避免在 UI 线程执行耗时任务。将耗时任务移到后台线程,可以确保 UI 线程始终空闲以处理消息循环,比如使用 Task.Run 或 async/await。
声明:小猿资源站是一个资源分享和技术交流平台,本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。