private void SetupHeadlines() { try { _bannerChangeTimer?.Stop(); _headlines = Headlines.Get(_game); _bannerBitmaps = new BitmapImage[_headlines.Banner.Length]; for (var i = 0; i < _headlines.Banner.Length; i++) { var imageBytes = _game.DownloadAsLauncher(_headlines.Banner[i].LsbBanner.ToString()); using (var stream = new MemoryStream(imageBytes)) { var bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.StreamSource = stream; bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit(); bitmapImage.Freeze(); _bannerBitmaps[i] = bitmapImage; } } this.Dispatcher.BeginInvoke(new Action(() => { BannerImage.Source = _bannerBitmaps[0]; })); _bannerChangeTimer = new System.Timers.Timer { Interval = 5000 }; _bannerChangeTimer.Elapsed += (o, args) => { if (_currentBannerIndex + 1 > _headlines.Banner.Length - 1) { _currentBannerIndex = 0; } else { _currentBannerIndex++; } this.Dispatcher.BeginInvoke(new Action(() => { BannerImage.Source = _bannerBitmaps[_currentBannerIndex]; })); }; _bannerChangeTimer.AutoReset = true; _bannerChangeTimer.Start(); this.Dispatcher.BeginInvoke(new Action(() => { NewsListView.ItemsSource = _headlines.News; })); } catch (Exception) { this.Dispatcher.BeginInvoke(new Action(() => { NewsListView.Items.Add(new News() { Title = "Could not download news data.", Tag = "DlError" }); })); } }