none
托管C++调用WPF的冷启动优化 RRS feed

  • 常规讨论

  • 不知道要将这个帖子发哪里,版主看看有没有更好的地方就麻烦挪一下,谢谢

    现在的项目的一个模块是MFC调用WPF,发现打开该模块界面时非常慢,通常需要10秒左右,但是要照顾主程序的启动,不能用主线程在程序启动时启动该模块,各位有什么好办法缩短冷启动的时间吗

    主要代码

    HWND GetMonitorControlHwnd(HWND parent, int x, int y, int width, int height)
    {
       System::Windows::Interop::HwndSourceParameters^ sourceParams = gcnew System::Windows::Interop::HwndSourceParameters ("MFCWPFApp");
        
    	sourceParams->PositionX = x;
    	sourceParams->PositionY = y;
    	sourceParams->Height = height;
    	sourceParams->Width = width;
    	sourceParams->ParentWindow = IntPtr(parent);
    	sourceParams->WindowStyle = WS_VISIBLE | WS_CHILD;
    
            MonitorControl::gHwndSource = gcnew System::Windows::Interop::HwndSource(*sourceParams);
            MonitorControl::gwcMonitor = gcnew Client::WPFControls::TvWallControls::MonitorControl;
    
    	FrameworkElement^ myPage = MonitorControl::gwcMonitor;
    	MonitorControl::gHwndSource->RootVisual = myPage;
    	MonitorControl::gHwndSource->SizeToContent=SizeToContent::WidthAndHeight;
            return (HWND) MonitorControl::gHwndSource->Handle.ToPointer();
    }

    通过日志发现,主要耗时在gcnew Client::WPFControls::TvWallControls::MonitorControl这个自己写的控件上,但是,用WPF应用程序去调用,初始化在1秒左右

    是不是我通过托管C++调用WPF的代码问题或者配置项的问题?

    2013年2月4日 8:12