首页 >> 大全

WPF 窗口卡死或者假死解决方案(MVVM模式)

2024-01-11 大全 337 作者:考证青年

问题描述

项目情况如下:程序业务:点击开始之后,从文件中获取数据,将数据显示到界面(按照某种可视化的形式)上,直到文件数据读完或者界面操作停止才会停止数据刷新。

程序能正常运行,但是,当程序开始之后,拖拽、缩放窗体(WPF默认的窗体样式),界面假死,鼠标失去响应,也不能回到任务栏…可以通过按"Win"键恢复,但是恢复之后,界面有可能已经失去正常工作能力了——数据刷新不正确,时序不对等等问题。

原因分析

通过使用VS自带的性能分析,可以看到:界面在刷新过程中CPU占用非常高(这个有可能是没有等待的While(true)死循环导致的),同时在执行界面赋值、操作UI元素时消耗的性能非常高(使用了传统的赋值方式和操作UI元素属性导致的,因为在WPF中能够操作UI元素的只有UI线程,这就导致了UI线程的工作负担非常繁重,以至于让界面假死或者不响应鼠标操作等)。那么如何解决这个问题呢?

WPF中早已提供了非常便捷的实现方式来解决实时对UI元素的刷新。它就是数据绑定。下面我简单说下,为什么数据绑定可以解决这类问题,以及它带来的好处。

解决方案

下面我就模拟上述问题来展示我的解决方法。

使用代码的方式实现数据绑定。

效果演示

电脑窗口假死_win10窗口假死_

总结

既然使用到了WPF,那么数据绑定是不得不学的一课,而且要非常认真的学习,因为它将影响你在这个平台上走多远。数据绑定可以概括为: 当数据源的属性值发生变化时,会主动通知UI元素展示最新的数据;同时,用户对控件的操作(修改)会直接修改数据源。这种编程方式也被称为数据驱动。

是一个非常强大的IDE,我们要学着使用VS提供的功能来帮助我们分析我们程序的性能。从而找到问题,解决问题。

Over

每次记录一小步…点点滴滴人生路…

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了