private void OnLoad(object sender, EventArgs e) { scroller = scroller ?? new KeepToCurrentScrollViewer(Root); IEnumerable <IViewableObject> messageSource = MessageSource; if (LoadInReverse) { var count = 0; var messages = messageSource .Reverse() .Select(x => x.View) .GetEnumerator(); while (count <= ApplicationSettings.PreloadMessageAmount && messages.MoveNext()) { count++; AddInReverseAsync(messages.Current, DispatcherPriority.DataBind); } if (count >= ApplicationSettings.PreloadMessageAmount) { var delayTimer = new DispatcherTimer(DispatcherPriority.DataBind) { Interval = TimeSpan.FromMilliseconds(450) }; delayTimer.Tick += (o, args) => { var batch = count + 25; while (count < batch) { if (messages.MoveNext()) { count++; scroller?.StabilizeNextScroll(); AddInReverseAsync(messages.Current, DispatcherPriority.DataBind); } else { delayTimer.Stop(); break; } } }; delayTimer.Start(); } loaded = true; return; } messageSource .Select(x => x.View) .Each(AddAsync); loaded = true; }
private void OnLoad(object sender, EventArgs e) { scroller = scroller ?? new KeepToCurrentScrollViewer(Root); IEnumerable<IViewableObject> messageSource = MessageSource; if (LoadInReverse) { var count = 0; var messages = messageSource .Reverse() .Select(x => x.View) .GetEnumerator(); while (count <= ApplicationSettings.PreloadMessageAmount && messages.MoveNext()) { count++; AddInReverseAsync(messages.Current, DispatcherPriority.DataBind); } if (count >= ApplicationSettings.PreloadMessageAmount) { var delayTimer = new DispatcherTimer(DispatcherPriority.DataBind) { Interval = TimeSpan.FromMilliseconds(450) }; delayTimer.Tick += (o, args) => { var batch = count + 25; while (count < batch) { if (messages.MoveNext()) { count++; scroller?.StabilizeNextScroll(); AddInReverseAsync(messages.Current, DispatcherPriority.DataBind); } else { delayTimer.Stop(); break; } } }; delayTimer.Start(); } loaded = true; return; } messageSource .Select(x => x.View) .Each(AddAsync); loaded = true; }
private void OnLoad(object sender, EventArgs e) { scroller = scroller ?? new KeepToCurrentScrollViewer(Root); IEnumerable<IViewableObject> messageSource = MessageSource; if (LoadInReverse) { messageSource .Reverse() .Select(x => x.View) .Each(AddInReverseAsync); loaded = true; return; } messageSource .Select(x => x.View) .Each(AddAsync); loaded = true; }