Ejemplo n.º 1
0
        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;
        }