private void InitWindows() { var curScreens = ScreenHandler.GetScreens(); foreach (var screen in curScreens) { var win = new ScreenWindow(); var config = new WindowPagesConfig { ScreenNum = screen, CurrentIdx = 0, Window = win, Pages = new IReportPage[] { new StartPage() } }; _monWinPagesDic.Add(screen, config); Dispatcher.Invoke(() => { ShowOnMonitor(screen, win); win.MainFrame.Navigate(config.Pages[0]); }); } }
private void UpdatePanelsData(IReadOnlyCollection <TvPanelsDto> data) { var curScreens = ScreenHandler.GetScreens(); var isEqual = true; foreach (var screen in curScreens) { var screenItem = data.SingleOrDefault(o => o.Num == screen) ?? new TvPanelsDto { Num = screen, Types = new[] { ScreenType.None } }; var currentItem = new WindowPagesConfig { ScreenNum = screen, Pages = new IReportPage[] { } }; if (_monWinPagesDic.ContainsKey(screen)) { currentItem = _monWinPagesDic[screen]; } isEqual = currentItem.Pages.Select(o => o.ScreenType).SequenceEqual(screenItem.Types); if (!isEqual) { break; } } if (!isEqual) { lock (_updateDataLocker) { Dispatcher.Invoke(RemoveAllWindows); foreach (var screen in curScreens) { var screenItem = data.SingleOrDefault(o => o.Num == screen) ?? new TvPanelsDto { Num = screen, Types = new[] { ScreenType.None } }; WindowPagesConfig config; var pages = new List <IReportPage>(); Dispatcher.Invoke(() => { foreach (var type in screenItem.Types) { //todo factory? IReportPage page; switch (type) { case ScreenType.ScheduleDeviationTable: page = new ScheduleDeviationTablePage(_refreshDataInterval); break; case ScreenType.ScheduleDeviationGraph: page = new ScheduleDeviationGraphPage(_refreshDataInterval, _diagramHoursBack, _diagramHoursForward); break; case ScreenType.BrigadeScheduleDeviationTable: page = new BrigadeScheduleDeviationTablePage(_refreshDataInterval); break; case ScreenType.ToDeviationTable: page = new ToDeviationTablePage(_refreshDataInterval); break; case ScreenType.CriticalMalfunctionsTable: page = new CriticalMalfunctionsTablePage(_refreshDataInterval); break; case ScreenType.TrainsInDepoMalfunctionsTable: page = new TrainsInDepoMalfunctionsTablePage(_refreshDataInterval); break; case ScreenType.TrainsInDepoStatusTable: page = new TrainsInDepoStatusTablePage(_refreshDataInterval); break; case ScreenType.JournalsTable: page = new JournalsTablePage(_refreshDataInterval); break; default: page = new StartPage(); break; } pages.Add(page); } config = new WindowPagesConfig { ScreenNum = screen, CurrentIdx = 0, Window = new ScreenWindow(), Pages = pages.ToArray() }; _monWinPagesDic[screen] = config; ShowOnMonitor(screen, config.Window); //navigate to first page config.Window.MainFrame.Navigate(config.Pages[0]); }); } Task.Run(() => { UpdateData(); }); } } }