在本地C应用程序中托管WPF表单时的性能问题

前端之家收集整理的这篇文章主要介绍了在本地C应用程序中托管WPF表单时的性能问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 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();

但你似乎正在做相反的事情.

猜你在找的C&C++相关文章