private void OnLoadCompleted(object sender, LoadContentEventArgs args)
        {
            XElement data = args.Data;

            if (data != null)
            {
                foreach (var elem in data.Descendants(m_creditType))
                {
                    Credit credit = new Credit
                    {
                        Name  = HtmlToXamlConverter.ConvertHtmlToXml(elem.Element("name").Value).Value,
                        Id    = elem.Element("id").Value,
                        Link  = elem.Element("link").Value,
                        Bank  = elem.Element("bank").Element("name").Value,
                        Rates = InitializeRates(elem.Element("short"))
                    };

                    this.CreditList.Items.Add(credit);
                }
            }
        }
        public void UpdateCollectionContent(XElement digest)
        {
            if (m_loadInProgress)
            {
                if (this.UpdateCompleted != null)
                {
                    m_args.Error = new Exception("Already in use");
                    UpdateCompleted(this, m_args);
                }

                return;
            }

            m_loadInProgress = true;

            m_loadCancelled = false;
            ThreadPool.QueueUserWorkItem((state) =>
            {
                if (m_event == null)
                {
                    m_event = new ManualResetEvent(false);
                }

                string[] files = null;
                IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
                string localLink = GetLocalLink(digest.Attribute("link").Value);
                string localDir = localLink.Substring(0, localLink.LastIndexOf("/"));
                if (myIsolatedStorage.DirectoryExists(localDir))
                {
                    files = myIsolatedStorage.GetFileNames(localDir + "/*");
                }
                else
                {
                    files = new string[1];
                }

                for (int i = 0; i < files.Count() && !m_loadCancelled; i++)
                {
                    m_event.Reset();
                    m_args.Error = null;
                    m_args.Progress = i + 1;
                    m_args.Data = null;

                    string link = digest.Attribute("link").Value + "?page=" + Convert.ToString(i + 1);
                    LoadCollectionFromRemote(link);

                    m_event.WaitOne();

                    LoadContentEventArgs tmpArgs = new LoadContentEventArgs(m_args.Error, m_args.Data, m_args.Progress);
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        if (this.UpdateProgress != null)
                        {
                            UpdateProgress(this, tmpArgs);
                        }
                    });

                    if (m_args.Error != null)
                    {
                        break;
                    }

                    m_args.Data.Add(new XAttribute("last_update_time", DateTime.Now.ToString()));
                    SaveContent(link, m_args.Data);
                }

                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    if (this.UpdateCompleted != null)
                    {
                        UpdateCompleted(this, m_args);
                    }
                });

                m_loadInProgress = false;
            });
        }
        private void OnLoadCompleted(object sender, LoadContentEventArgs args)
        {
            XElement data = args.Data;
            if (data != null)
            {
                foreach (var elem in data.Descendants(m_creditType))
                {
                    Credit credit = new Credit
                    {
                        Name = HtmlToXamlConverter.ConvertHtmlToXml(elem.Element("name").Value).Value,
                        Id = elem.Element("id").Value,
                        Link = elem.Element("link").Value,
                        Bank = elem.Element("bank").Element("name").Value,
                        Rates = InitializeRates(elem.Element("short"))
                    };

                    this.CreditList.Items.Add(credit);
                }
            }
        }
        public void UpdateCollectionContent(XElement digest)
        {
            if (m_loadInProgress)
            {
                if (this.UpdateCompleted != null)
                {
                    m_args.Error = new Exception("Already in use");
                    UpdateCompleted(this, m_args);
                }

                return;
            }

            m_loadInProgress = true;

            m_loadCancelled = false;
            ThreadPool.QueueUserWorkItem((state) =>
            {
                if (m_event == null)
                {
                    m_event = new ManualResetEvent(false);
                }

                string[] files = null;
                IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
                string localLink = GetLocalLink(digest.Attribute("link").Value);
                string localDir  = localLink.Substring(0, localLink.LastIndexOf("/"));
                if (myIsolatedStorage.DirectoryExists(localDir))
                {
                    files = myIsolatedStorage.GetFileNames(localDir + "/*");
                }
                else
                {
                    files = new string[1];
                }

                for (int i = 0; i < files.Count() && !m_loadCancelled; i++)
                {
                    m_event.Reset();
                    m_args.Error    = null;
                    m_args.Progress = i + 1;
                    m_args.Data     = null;

                    string link = digest.Attribute("link").Value + "?page=" + Convert.ToString(i + 1);
                    LoadCollectionFromRemote(link);

                    m_event.WaitOne();

                    LoadContentEventArgs tmpArgs = new LoadContentEventArgs(m_args.Error, m_args.Data, m_args.Progress);
                    Deployment.Current.Dispatcher.BeginInvoke(() =>
                    {
                        if (this.UpdateProgress != null)
                        {
                            UpdateProgress(this, tmpArgs);
                        }
                    });

                    if (m_args.Error != null)
                    {
                        break;
                    }

                    m_args.Data.Add(new XAttribute("last_update_time", DateTime.Now.ToString()));
                    SaveContent(link, m_args.Data);
                }

                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    if (this.UpdateCompleted != null)
                    {
                        UpdateCompleted(this, m_args);
                    }
                });

                m_loadInProgress = false;
            });
        }