У меня есть окно WPF, которое отлично работает при размещении в приложении WPF, но когда я загружаю его из моего собственного приложения на С++, для рендеринга требуется очень много времени, а поток пользовательского интерфейса блокируется до его завершения.
Основным нарушителем в моем окне является серия элементов управления элементами, используемыми для отображения сетки из 9 на 12, которые представляют состояния компонентов внутри моей системы.
Управление всеми элементами занимает до 14 секунд для его первоначального рендеринга. (Это почти мгновенно при запуске в приложении WPF)
Каждая строка имеет текстовый заголовок, который при нажатии показывает небольшую сводку данных (max, min, mean, std dev) для каждого из значков состояния. щелчок по этому заголовку может занять до 4 секунд, чтобы сделать резюме, но мгновенно в моем приложении WPF.
Существуют ли какие-либо известные трюки для того, чтобы WPF выполнялся в собственном приложении?
[изменить]
Я только что попробовал запустить его из большого приложения форм Windows.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?