PEK
PEK

Reputation: 4338

Clear image cache created by <Image>

If I have an element like this in a Windows Store or Windows Phone application:

<Image Source="{Binding UrlToWebServer}" />

the image is cached locally. This is great. But how do I remove all cached images on disc from code?

Upvotes: 1

Views: 159

Answers (2)

Luis Soto
Luis Soto

Reputation: 11

Hi it´s a little bit late to answer this question but you can use this class to delete the cache of a specific files or all if you want

this is the class helper

 class CacheCleanup : IDisposable
{
    private DispatcherTimer cleanCacheTimer;
    public CacheCleanup(TimeSpan? cleanInterval = null)
    {
        if (!cleanInterval.HasValue)
            cleanInterval = TimeSpan.FromMinutes(0.2);

        cleanCacheTimer = new DispatcherTimer();
        cleanCacheTimer.Interval = cleanInterval.Value;
        cleanCacheTimer.Tick += CleanCacheTimer_Tick;
        cleanCacheTimer.Start();
    }

    private void CleanCacheTimer_Tick(object sender, object e)
    {
        try
        {
            StorageFolder localDirectory = ApplicationData.Current.LocalFolder;
            string[] tmpCacheDirectories = Directory.GetDirectories(localDirectory.Path + "\\..\\ac\\inetcache");
            foreach (string dir in tmpCacheDirectories)
            {
                string[] tmpCacheFilesPng = Directory.GetFiles(dir, "*.png");
                foreach (string file in tmpCacheFilesPng)
                {

                        try
                        {
                            File.Delete(file);
                            Debug.WriteLine("Deleted png: " + file);
                        }
                        catch (Exception) { }
                }
                string[] tmpCacheFilesJpg = Directory.GetFiles(dir, "*.jpg");
                foreach (string file in tmpCacheFilesJpg)
                {

                    try
                    {
                        File.Delete(file);
                        Debug.WriteLine("Deleted jpg: " + file);
                    }
                    catch (Exception) { }
                }
            }
        }
        catch (Exception ex) { Debug.WriteLine("ERROR CLEANING CACHE: " + ex.Message); }
    }

    public void Dispose()
    {
        if (cleanCacheTimer != null)
        {
            cleanCacheTimer.Stop();
            cleanCacheTimer = null;
        }
    }
}

and this is the way how you can call this class in some part of your c# code

CacheCleanup cacheCleanup = new CacheCleanup();

Upvotes: 0

Joehl
Joehl

Reputation: 3701

You just have to set the imagesource to NULL

Something like this:

BitmapImage bitmapImage = myimage.Source as BitmapImage;
bitmapImage.UriSource = null;
myimage.Source = null;

This works for me. Here you can find mor infos handling images (section Image Caching for example).

Upvotes: 2

Related Questions