Проблема производительности при размещении формы WPF в собственном приложении C ++

У меня есть окно WPF, которое прекрасно работает при размещении в приложении WPF, но когда я загружаю его из моего собственного приложения C ++, рендеринг занимает очень много времени, и поток пользовательского интерфейса блокируется, пока не завершится.

Основным нарушителем в моем окне является ряд элементов управления, используемых для отображения сетки 9 на 12 значков, которые представляют состояния компонентов в моей системе.

Весь начальный контроль предметов занимает до 14 секунд. (Это почти мгновенно при запуске в приложении WPF)

Каждая строка имеет текстовый заголовок, который при нажатии отображает небольшую сводку данных (max, min, mean, std dev) для каждого из значков состояния. щелчок по этому заголовку может занять до 4 секунд, чтобы отобразить сводку, но это мгновенно в моем приложении WPF.

Существуют ли какие-либо известные приемы для обеспечения хорошей работы WPF в собственном приложении?

[Редактировать]

Я только что попытался запустить его из большого приложения Windows. code:

    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?

10
задан ghnz 22 January 2013 в 21:52
поделиться