OnStartup() private method

private OnStartup ( StartupEventArgs e ) : void
e StartupEventArgs
return void
示例#1
0
文件: Deployment.cs 项目: ynkbt/moon
        // will be called when all assemblies are loaded (can be async for downloading)
        // which means we need to report errors to the plugin, since it won't get it from calling managed code
        internal bool CreateApplication()
        {
            SetCurrentApplication(null);

            if (EntryAssembly == null)
            {
                EmitError(2103, "Could not find the entry point assembly");
                return(false);
            }

            Type entry_type = EntryAssembly.GetType(EntryPointType);

            if (entry_type == null)
            {
                EmitError(2103, String.Format("Could not find the startup type {0} on the {1}",
                                              EntryPointType, EntryPointAssembly));
                return(false);
            }

            if (!entry_type.IsSubclassOf(typeof(Application)) && entry_type != typeof(Application))
            {
#if SANITY
                Type t       = entry_type;
                int  spacing = 0;
                Console.WriteLine("Application type: {0}", typeof(Application).AssemblyQualifiedName);
                while (t != null)
                {
                    if (spacing > 0)
                    {
                        for (int i = 0; i < spacing; i++)
                        {
                            Console.Write(" ");
                        }
                        Console.Write("+ ");
                    }
                    Console.WriteLine("{0} from {1}", t.AssemblyQualifiedName, t.Assembly.Location);
                    spacing += 2;
                    t        = t.BaseType;
                }
#endif

                EmitError(2103, "Startup type does not derive from System.Windows.Application");
                return(false);
            }

            foreach (Assembly a in Assemblies)
            {
                Application.LoadXmlnsDefinitionMappings(a);
            }

            Application instance = null;

            try {
                instance = (Application)Activator.CreateInstance(entry_type);
                // set HasElevatedPermissions based on IsRunningOutOfBrowser and ElevatedPermissions.Required
                if (IsElevatedPermissionsRequired)
                {
                    instance.HasElevatedPermissions = instance.IsRunningOutOfBrowser;
                }
            } catch {
                EmitError(2103, String.Format("Error while creating the instance of type {0}", entry_type));
                return(false);
            }

            if (instance.IsRunningOutOfBrowser)
            {
                IntPtr         window_handle = instance.MainWindow.native;
                WindowSettings ws            = OutOfBrowserSettings.WindowSettings;
                if (ws != null)
                {
                    Window w = instance.MainWindow;
                    w.Width  = ws.Width;
                    w.Height = ws.Height;

                    switch (ws.WindowStartupLocation)
                    {
                    case WindowStartupLocation.Manual:
                        w.Left = ws.Left;
                        w.Top  = ws.Top;
                        break;

                    case WindowStartupLocation.CenterScreen:
                        IntPtr windowing_system = NativeMethods.runtime_get_windowing_system();
                        IntPtr moon_window      = NativeMethods.window_get_moon_window(window_handle);
                        w.Left = ((NativeMethods.moon_windowing_system_get_screen_width(windowing_system, moon_window) - w.Width) / 2);
                        w.Top  = ((NativeMethods.moon_windowing_system_get_screen_height(windowing_system, moon_window) - w.Height) / 2);
                        break;

                    default:
                        // let the OS decide where to show the window
                        break;
                    }

                    Uri    source = UriHelper.FromNativeUri(NativeMethods.surface_get_source_location(Surface.Native));
                    string host   = source.Host;
                    if (String.IsNullOrEmpty(source.Host))
                    {
                        host = "localhost";
                    }
                    NativeMethods.window_set_title(window_handle, ws.Title + " - " + host);
                    NativeMethods.window_set_style(window_handle, ws.WindowStyle);
                }
                else
                {
                    NativeMethods.window_set_title(window_handle, OutOfBrowserSettings.ShortName);
                }
            }

            StartupEventArgs args = new StartupEventArgs();
            instance.OnStartup(args);

            return(true);
        }