在本地C应用程序中托管WPF表单时的性能问题
发布时间:2020-12-16 03:11:41 所属栏目:百科 来源:网络整理
导读:我有一个 WPF窗口运行良好的托管在 WPF应用程序,但是当我从我的本机C应用程序加载它需要很长的时间渲染和UI线程阻塞,直到它完成. 我的窗口上的主要罪犯是一系列项目控件,用于显示一个9×12个网格的图标,代表我系统中组件的状态. 整个项目控件最多需要14秒才
我有一个
WPF窗口运行良好的托管在
WPF应用程序,但是当我从我的本机C应用程序加载它需要很长的时间渲染和UI线程阻塞,直到它完成.
我的窗口上的主要罪犯是一系列项目控件,用于显示一个9×12个网格的图标,代表我系统中组件的状态. 整个项目控件最多需要14秒才能进行初始渲染. (这在WPF应用程序中运行时几乎是即时的) 每行都有一个文本标题,当单击时显示每个状态图标的数据(max,min,mean,std dev)的一个小的摘要.点击此标题可能需要4秒才能呈现摘要,但在我的WPF应用程序中即时. 是否有任何已知的技巧,使WPF在本机应用程序中执行得很好? [编辑] 我刚刚尝试使用以下代码从大型.NET窗体应用程序启动它: public bool? ShowWpfDialog(System.Windows.Window window,Form owner) { var helper = new System.Windows.Interop.WindowInteropHelper(window) {Owner = (owner == null) ? IntPtr.Zero : owner.Handle}; return window.ShowDialog(); } 我与本机应用程序运行时的性能问题相同. (.net应用程序也运行本机代码.) [编辑] 当我不使用WindowInteropHelper代码执行正常: public bool? ShowWpfDialog(System.Windows.Window window,Form owner) { //var helper = new System.Windows.Interop.WindowInteropHelper(window) // {Owner = (owner == null) ? IntPtr.Zero : owner.Handle}; return window.ShowDialog(); } 什么是WindowInteropHelper会导致性能问题? [编辑] 当我使用WindowInteropHelper加载所有者时,资源解决方式会出现问题吗? 解决方法
WindowInteropHelper的文档表明您应该将HELPER的句柄设置为c句柄
WindowInteropHelper wih = new WindowInteropHelper(myDialog); wih.Owner = ownerHwnd; myDialog.ShowDialog(); 但你似乎正在做相反的事情. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |