public static void Load()
        {
            picturesCache = new PicturesCache();
            try
            {
                using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (store.FileExists(FileName))
                    {
                        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(FileName, FileMode.Open, store))
                        {
                            DataContractSerializer  serializer = new DataContractSerializer(typeof(List <PictureItemStore>));
                            List <PictureItemStore> items      = (List <PictureItemStore>)serializer.ReadObject(stream);

                            foreach (var itemStore in items)
                            {
                                WriteableBitmap _bitmap = new WriteableBitmap(itemStore.Width, itemStore.Height);
                                int             count   = _bitmap.Pixels.Length * sizeof(int);
                                Buffer.BlockCopy(itemStore.Pixels, 0, _bitmap.Pixels, 0, count);
                                PictureCacheItem picItem = new PictureCacheItem(_bitmap, itemStore.PictureId, itemStore.Hash);
                                CacheItem        item    = new CacheItem(picItem, itemStore.ValidDuration, itemStore.CreationDate);
                                picturesCache.Cache.Add(itemStore.PictureId.ToString(), item);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
        }
 public void AddToCache(PictureCacheItem image)
 {
     CacheManager.PictureCache.Add(image.PictureId.ToString(), image, TimeSpan.FromDays(10));
     if (downloadingPictures.ContainsKey(image.PictureId))
     {
         downloadingPictures.Remove(image.PictureId);
     }
 }
        public PictureCacheItem GetImage(PictureInfoDTO pictureInfo)
        {
            PictureCacheItem picture = (PictureCacheItem)CacheManager.PictureCache.Get(pictureInfo.PictureIdk__BackingField.ToString());

            if (picture == null || (picture.Image != null && picture.Hash != pictureInfo.Hashk__BackingField))
            {
                loadImage(pictureInfo);
            }
            return(picture);
        }
        public void Save()
        {
            if (CacheManager.PictureCache.CacheItems.Values.Count == 0)
            {
                return;
            }
            try
            {
                using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(FileName, FileMode.Create, store))
                    {
                        List <PictureItemStore> items = new List <PictureItemStore>();

                        foreach (var item in CacheManager.PictureCache.CacheItems.Values)
                        {
                            PictureItemStore storeItem = new PictureItemStore();
                            PictureCacheItem cacheItem = (PictureCacheItem)item.Data;
                            WriteableBitmap  _bitmap   = (WriteableBitmap)cacheItem.Image;
                            if (cacheItem.Image == null)
                            {
                                continue;
                            }
                            storeItem.Width         = cacheItem.Image.PixelWidth;
                            storeItem.Height        = cacheItem.Image.PixelHeight;
                            storeItem.PictureId     = cacheItem.PictureId;
                            storeItem.ValidDuration = item.ValidDuration;
                            storeItem.CreationDate  = item.CreationDate;
                            storeItem.Hash          = cacheItem.Hash;
                            int count = _bitmap.Pixels.Length * sizeof(int);
                            storeItem.Pixels = new byte[count];
                            Buffer.BlockCopy(_bitmap.Pixels, 0, storeItem.Pixels, 0, count);
                            items.Add(storeItem);
                        }
                        DataContractSerializer serializer = new DataContractSerializer(typeof(List <PictureItemStore>));
                        serializer.WriteObject(stream, items);
                    }
                }
            }
            catch (Exception)
            {
            }
        }
        public void Execute()
        {
            try
            {
                var m = new ServiceManager <GetImageCompletedEventArgs>(delegate(BodyArchitectAccessServiceClient client1, EventHandler <GetImageCompletedEventArgs> operationCompleted)
                {
                    using (OperationContextScope ocs = new OperationContextScope(client1.InnerChannel))
                    {
                        OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("SessionId", "http://MYBASERVICE.TK/", ApplicationState.Current.SessionData.Token.SessionId));
                        OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("PictureId", "http://MYBASERVICE.TK/", picture.PictureIdk__BackingField));
                        OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("Hash", "http://MYBASERVICE.TK/", picture.Hashk__BackingField));
                        ApplicationState.AddCustomHeaders();
                        client1.GetImageCompleted -= operationCompleted;
                        client1.GetImageCompleted += operationCompleted;
                        client1.GetImageAsync();
                    }
                });
                m.OperationCompleted += (s, a) =>
                {
                    if (a.Error != null)
                    {
                        PictureCacheItem item = new PictureCacheItem(null, picture.PictureIdk__BackingField, picture.Hashk__BackingField);
                        PicturesCache.Instance.AddToCache(item);
                        PicturesCache.Instance.Notify(new PictureInfoDTO()
                        {
                            PictureIdk__BackingField = picture.PictureIdk__BackingField, Hashk__BackingField = picture.Hashk__BackingField
                        });
                    }
                    else if (a.Result != null)
                    {
                        MemoryStream  stream = new MemoryStream(a.Result.Result);
                        ExtendedImage desert = new ExtendedImage();
                        desert.SetSource(stream);
                        desert.LoadingFailed += delegate(object sender, UnhandledExceptionEventArgs e)
                        {
                            PictureCacheItem item = new PictureCacheItem(null, picture.PictureIdk__BackingField, picture.Hashk__BackingField);
                            PicturesCache.Instance.AddToCache(item);
                            PicturesCache.Instance.Notify(new PictureInfoDTO()
                            {
                                PictureIdk__BackingField = picture.PictureIdk__BackingField, Hashk__BackingField = picture.Hashk__BackingField
                            });
                        };
                        desert.LoadingCompleted += delegate
                        {
                            ApplicationState.SynchronizationContext.Post(delegate
                            {
                                var image             = desert.ToBitmap();
                                PictureCacheItem item = new PictureCacheItem(image, picture.PictureIdk__BackingField, picture.Hashk__BackingField);
                                PicturesCache.Instance.AddToCache(item);
                                PicturesCache.Instance.Notify(picture);
                                //if (OperationCompleted != null)
                                //{
                                //    OperationCompleted(this, EventArgs.Empty);
                                //}
                            }, null);
                        };
                    }
                };

                m.Run();
            }
            catch (Exception)
            {
                PictureCacheItem item = new PictureCacheItem(null, picture.PictureIdk__BackingField, picture.Hashk__BackingField);
                PicturesCache.Instance.AddToCache(item);
                PicturesCache.Instance.Notify(new PictureInfoDTO()
                {
                    PictureIdk__BackingField = picture.PictureIdk__BackingField, Hashk__BackingField = picture.Hashk__BackingField
                });
            }
        }