我有一个
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();
但你似乎正在做相反的事情.