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")}"); }); }
/// <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); }
private void OnEventArrived(object sender, EventArrivedEventArgs e) { var(instanceName, brightness) = MSMonitor.ParseBrightnessEventArgs(e); _onBrightnessChanged?.Invoke(instanceName, brightness); }