Example #1
0
        public async Task InvokeAsync(DispatcherPriority priority, Delegate callback, params object[] arguments)
        {
            if (ContextThread == Thread.CurrentThread)
            {
                callback.DynamicInvoke(arguments);
                return;
            }

            switch (ContextType)
            {
            case GuiContextType.None:
            {
                await Task.Run(() => { callback.DynamicInvoke(arguments); });

                return;
            }

            case GuiContextType.WPF:
            {
                await GuiDispatcher.InvokeAsync(() => { callback.DynamicInvoke(arguments); }, priority);

                return;
            }

            case GuiContextType.WinForms:
            {
                var doneEvent = WaitEventFactory.Create(isCompleted: false, useSlim: true);
                Context.Post((args) =>
                    {
                        try
                        {
                            callback.DynamicInvoke(args as object[]);
                        }
                        catch { throw; }
                        finally { doneEvent.Complete(); }
                    }, arguments);

                await Task.Run(() =>
                    {
                        doneEvent.Wait();
                        doneEvent.Dispose();
                    });

                return;
            }
            }
        }
Example #2
0
        /// <summary>
        /// Processing the application start.
        /// </summary>
        /// <param name="e">Argument.</param>
        protected override void OnStartup(StartupEventArgs e)
        {
            GuiDispatcher.InitGlobalDispatcher();
            DispatcherPropertyChangedEventManager.Init();

            //GuiDispatcher.GlobalDispatcher.AddPeriodicalAction(CommandManager.InvalidateRequerySuggested);

            if (!ProxyConfigurationFile.IsEmpty() && File.Exists(ProxyConfigurationFile))
            {
                var settings = new XmlSerializer <SettingsStorage>().Deserialize(ProxyConfigurationFile);

                ProxySettings = new ProxySettings();
                ProxySettings.Load(settings);
                ProxySettings.ApplyProxySettings();
            }
            else
            {
                ProxySettings = ProxySettings.GetProxySettings();
            }

            if (CheckTargetPlatform)
            {
                //если одним из аргументов является путь к самому приложению,
                //то значит оно запущено из под специального загрузчика
                var executablePath = Assembly.GetEntryAssembly().Location;
                if (e.Args.Any(a => a == executablePath) || !Environment.Is64BitOperatingSystem)
                {
                    var language = e.Args.FirstOrDefault(s => s.ContainsIgnoreCase(_langPrefix));

                    LocalizedStrings.ActiveLanguage = language != null
                                                ? language.Replace(_langPrefix, string.Empty).To <Languages>()
                                                : LocalizedStrings.ActiveLanguage;

                    StartApp();

                    return;
                }

                if (!Directory.Exists(AppDataPath))
                {
                    Directory.CreateDirectory(AppDataPath);
                }

                var window = new TargetPlatformWindow();

                if (window.AutoStart || window.ShowDialog() == true)
                {
                    switch (window.SelectedPlatform)
                    {
                    case Platforms.x86:
                        StartX86();
                        Process.GetCurrentProcess().Kill();
                        break;

                    case Platforms.x64:
                        // обнуляем ссылку главного окна, так как она равна TargetPlatformWindow
                        MainWindow = null;

                        StartApp();
                        break;
                    }
                }
                else
                {
                    MainWindow = null;
                    Close();
                }
            }

            base.OnStartup(e);
        }
Example #3
0
 protected override void Awake()
 {
     base.Awake();
     Dispatcher = FindObjectOfType <GuiDispatcher>();
 }