Esempio n. 1
0
            public async Task PopulateAsync()
            {
                System = GetSystem();

                var sw = new Stopwatch();

                var tasks = new[]
                {
                    GetTask(nameof(DeviceItems), () =>
                            DeviceItems = DeviceContext.EnumerateMonitorDevices().ToArray()),

                    GetTask(nameof(DisplayMonitorItems), async() =>
                    {
                        if (OsVersion.Is10Build17134OrGreater)
                        {
                            DisplayMonitorItems = await DisplayMonitor.GetDisplayMonitorsAsync();
                        }
                    }),

                    GetTask(nameof(DisplayConfigItems), () =>
                            DisplayConfigItems = DisplayConfig.EnumerateDisplayConfigs().ToArray()),

                    GetTask(nameof(InstalledItems), () =>
                            InstalledItems = DeviceInformation.EnumerateInstalledMonitors().ToArray()),

                    GetTask(nameof(PhysicalItems), () =>
                            PhysicalItems = DeviceContext.GetMonitorHandles().ToDictionary(
                                x => x,
                                x => MonitorConfiguration.EnumeratePhysicalMonitors(x.MonitorHandle, true)
                                .Select(x => new PhysicalItemPlus(x))
                                .ToArray())),

                    GetTask(nameof(DesktopItems), () =>
                            DesktopItems = MSMonitor.EnumerateDesktopMonitors().ToArray())
                };

                sw.Start();

                ElapsedTime = await Task.WhenAll(tasks);

                sw.Stop();

                Task <string> GetTask(string name, Action action) =>
                Task.Run(() =>
                {
                    action.Invoke();
                    var elapsed = sw.Elapsed;
                    return($@"{name,-14} -> {elapsed.ToString($@"{(elapsed.Minutes > 0 ? @"m\:" : string.Empty)}s\.fff")}");
                });
            }
Esempio n. 2
0
        /// <summary>
        /// Subscribes to brightness changed event.
        /// </summary>
        /// <param name="onBrightnessChanged">Action to be invoked when brightness changed</param>
        /// <param name="onError">Action to be invoked when error occurred</param>
        /// <returns>True if successfully subscribes</returns>
        public bool Subscribe(Action <string, int> onBrightnessChanged, Action <string> onError)
        {
            (_watcher, var message) = MSMonitor.StartBrightnessEventWatcher();
            if (_watcher is null)
            {
                if (!string.IsNullOrEmpty(message))
                {
                    onError?.Invoke(message);
                }

                return(false);
            }

            this._onBrightnessChanged = onBrightnessChanged ?? throw new ArgumentNullException(nameof(onBrightnessChanged));
            _watcher.EventArrived    += OnEventArrived;
            return(true);
        }
Esempio n. 3
0
 private void OnEventArrived(object sender, EventArrivedEventArgs e)
 {
     var(instanceName, brightness) = MSMonitor.ParseBrightnessEventArgs(e);
     _onBrightnessChanged?.Invoke(instanceName, brightness);
 }