private void RefreshCore(IProgress progress, object identity)
        {
            MultiRefreshableSource multiRefreshableSource = this.CreateRefresher(identity);

            this.refreshers.Add(multiRefreshableSource);
            this.Refreshing = true;
            multiRefreshableSource.RefreshingChanged += this.Refresher_RefreshingChanged;
            multiRefreshableSource.Refresh(progress);
        }
        private void Refresher_RefreshingChanged(object sender, EventArgs e)
        {
            MultiRefreshableSource multiRefreshableSource = sender as MultiRefreshableSource;

            if (!multiRefreshableSource.Refreshing)
            {
                multiRefreshableSource.RefreshingChanged -= this.Refresher_RefreshingChanged;
                this.refreshers.Remove(multiRefreshableSource);
                if (this.refreshers.Count == 0)
                {
                    this.Refreshing = false;
                }
            }
        }
        private MultiRefreshableSource CreateRefresher(object identity)
        {
            MultiRefreshableSource multiRefreshableSource = new MultiRefreshableSource();

            if (identity == null)
            {
                multiRefreshableSource.RefreshableSources.AddRange(this.DataTableLoaders.ToArray());
            }
            else
            {
                foreach (DataTableLoader dataTableLoader in this.DataTableLoaders)
                {
                    multiRefreshableSource.RefreshableSources.Add(new SingleRowRefreshObject(identity, dataTableLoader));
                }
            }
            return(multiRefreshableSource);
        }