加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在本地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();

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读