如何判断WPF下窗口加载完成了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何判断WPF下窗口加载完成了相关的知识,希望对你有一定的参考价值。

你把所有加载界面的代码都写在一个方法里面,当这个方法执行完成时,就表示窗口加载完了
你也可以在方法的结束设置IsLoaded=True;(这是你自定义的局部变量,表示是否加载完成)
然后判断IsLoaded就可以知道窗体是否加载完成了
参考技术A 加一个contentRendered事件,该事件在loaded之后执行,也是在所有元素渲染结束之后执行
前台加ContentRendered="window_contentRendered"
后台加
private void window_contentRendered(object sender, EventArgs e)


从 Visual Studio 启动时,WPF 应用程序加载初始窗口非常慢

【中文标题】从 Visual Studio 启动时,WPF 应用程序加载初始窗口非常慢【英文标题】:WPF Application very slow to load initial window when launched from Visual Studio 【发布时间】:2013-08-30 07:14:42 【问题描述】:

我有一个相对简单的 WPF 应用程序。每当我从 Visual Studio 2012 中启动它(在调试或发布模式下)时,启动速度非常慢(实际上可能需要几分钟)。 已经完成了一些自定义初始化工作(从 SQLite 数据库读取文件和加载数据),但它应该在 1 秒内完成,因为它比我通过单击 Debug/myapp.exe 文件直接启动应用程序所需的时间更少。

奇怪的行为是,如果我中断执行并立即继续(IDE 中的“播放”按钮),窗口将立即加载。 如果我按 F5“开始调试”会出现问题,但如果我按 Ctrl+F5“不调试就开始”,它会立即加载。

我在 x86 模式下使用 .NET 4.5。

我尝试使用 dotTrace 性能分析器进行分析,但无法通过这种方式重现问题(它会立即加载)。

您知道造成这种情况的原因吗?

【问题讨论】:

它是否仅在启动时或以后也很慢,例如当您继续单步执行代码时? 仅在启动时,实际上甚至在 InitializeComponent() 被调用之前。 你安装了VS update 3吗? 您是否配置了符号服务器?可能是调试器加载了额外的符号。 是的,我已经安装了 VS 更新 3。我已取消选中默认符号服务器。我还有其他 WPF 项目可以立即加载并共享大部分自定义初始化代码。 【参考方案1】:

这种缓慢的可能性可能是由于打开了太多 WPF 跟踪设置。如果这问题,您可以判断,因为输出窗口将在项目启动时填充信息。

如果这您的问题,您可以通过转到

来调整您的跟踪设置

工具 > 选项 > 调试 > WPF 跟踪设置

找到正确的部分后,您可以关闭各种跟踪选项,启动应用程序时您应该会看到速度有所提高。

【讨论】:

不幸的是,它们都已关闭,并且“输出”窗口中没有显示任何内容。【参考方案2】:

代码中可能设置了大量的断点。打开Breakpoints 窗口(Debug->Windows)并将其全部关闭以查看是否是原因。 或者更好的是,您可以从光盘中删除 .suo 用户文件,该文件存储断点和会话设置。

另一个可能的原因是扩展程序出现故障。您可能想尝试禁用一些插件,看看效果是否更好。

另外,如果活动选项卡是图形窗口预览,我记得我体验过 WPF 应用程序从 VS 启动缓慢。

【讨论】:

【参考方案3】:

在我的情况下,问题是由于某种原因 VS 不缓存 System.Windows.Interactivity.dll 的符号,并且每次我启动调试会话时,它们都会从服务器下载。导航到 Tools -> Options -> Debugging -> Symbols 并选择带有空模块列表的 "Only specified modules" 解决了延迟问题。

【讨论】:

以上是关于如何判断WPF下窗口加载完成了的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2013 wpf 添加窗口加载和关闭函数

如何在 WPF 中显示窗口而不丢失控件?

如何在 WPF 窗口中重新加载所有本地化字符串?

如何在wpf窗口加载中选中xceedsoftware.checkboxlist控件中的一些项目。

如何在wpf窗口加载中选中xceedsoftware.checkboxlist控件中的一些项目。

如何判断网页是不是加载完毕