{"id":782,"date":"2014-11-24T00:55:35","date_gmt":"2014-11-23T22:55:35","guid":{"rendered":"http:\/\/dev.bratched.fr\/fr\/?p=782"},"modified":"2014-11-24T00:55:35","modified_gmt":"2014-11-23T22:55:35","slug":"mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml","status":"publish","type":"post","link":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/","title":{"rendered":"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim"},"content":{"rendered":"<p>&nbsp;<\/p>\n<h1>Ecriture dans l&rsquo;isolated Storage d&rsquo;un fichier image<\/h1>\n<p><a href=\"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/IsolatedStorage.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-783\" src=\"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/IsolatedStorage.png\" alt=\"Ecriture Multiple dans l'Isolated Storage\" width=\"480\" height=\"360\" srcset=\"https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/IsolatedStorage.png 800w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/IsolatedStorage-300x225.png 300w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/IsolatedStorage-768x576.png 768w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Il est parfois fort utile de sauvegarder les images provenant d&rsquo;un serveur HTTP dans un cache afin d&rsquo;\u00e9viter de les charger \u00e0 chaque fois.<\/p>\n<p>En impl\u00e9mentant\u00a0ce syst\u00e8me de cache en asynchrone, je me suis rendu compte de plusieurs probl\u00e8mes causant syst\u00e9matiquement un UnauthorizedAccessException: Access is denied (0x80070005).<\/p>\n<p><!--more--><\/p>\n<figure id=\"attachment_784\" aria-describedby=\"caption-attachment-784\" style=\"width: 860px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/ExceptionAccessDenied.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-784\" src=\"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/ExceptionAccessDenied.png\" alt=\"ScreenShot Exception Access Denied\" width=\"860\" height=\"310\" srcset=\"https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/ExceptionAccessDenied.png 1113w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/ExceptionAccessDenied-300x108.png 300w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/ExceptionAccessDenied-768x277.png 768w, https:\/\/bratched.com\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/ExceptionAccessDenied-1024x369.png 1024w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><figcaption id=\"caption-attachment-784\" class=\"wp-caption-text\">UnauthorizedAccessException: Access is denied (0x80070005).<\/figcaption><\/figure>\n<p>Le probl\u00e8me rencontr\u00e9 intervient lorsque plusieurs images d&rsquo;une liste essaient d&rsquo;enregistrer des \u00e9l\u00e9ments dans l&rsquo;Isolated Storage en m\u00eame temps.<\/p>\n<p>Pourtant le code me paraissait plut\u00f4t correct ?<\/p>\n<pre class=\"lang:default decode:true \">public async Task&lt;string&gt; SaveImageInStorageAsyncBad(string urlImage, object datas)\n{\n    if (!String.IsNullOrEmpty(urlImage) &amp;&amp; datas is byte[])\n    {\n        string id = urlImage;\n       \n            var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;\n            var folder = await localFolder.CreateFolderAsync(\"DataCache\", Windows.Storage.CreationCollisionOption.OpenIfExists);\n            var file = await folder.CreateFileAsync(id, Windows.Storage.CreationCollisionOption.ReplaceExisting);\n            var stream = await file.OpenStreamForWriteAsync();\n            using (var outStream = stream)\n            {\n                var dataWriter = new Windows.Storage.Streams.DataWriter(outStream.AsOutputStream());\n                dataWriter.WriteBytes(datas as byte[]);\n                await dataWriter.StoreAsync();\n                return id;\n            }\n        \n    }\n    else\n        return String.Empty;\n}\n<\/pre>\n<h1>\u00a0FlushAsync()<\/h1>\n<p>La premi\u00e8re chose qu&rsquo;il manque est un await dataWriter.FlushAsync() juste apr\u00e8s le StoreAsync().<\/p>\n<p>En effet, nous utilisons un Stream pour \u00e9crire l&rsquo;image.<\/p>\n<p>Le Flush permet de s&rsquo;assurer que tout le stream va \u00eatre \u00e9crit correctement avant de continuer.<\/p>\n<h1>Verrou &#8211; Lock ?<\/h1>\n<p>Mais le Flush ne suffit pas l&rsquo;erreur est encore rencontr\u00e9e. Il va falloir prot\u00e9ger le code en \u00e9vitant une \u00e9criture parall\u00e8le des images.<\/p>\n<p>En mode Synchrone un Lock aurait p\u00fb \u00eatre utilis\u00e9 mais nous somme dans un traitement asynchrone.<\/p>\n<p>L&rsquo;utilisation du Lock est interdite car emp\u00eache le thread de continuer. Le compilateur l&rsquo;indique clairement.<\/p>\n<p>Pour assurer une \u00e9criture \u00e0 la fois, nous allons utiliser l&rsquo;objet SemaphoreSlim.<\/p>\n<p>Il faut initialiser\u00a0cet objet de la fa\u00e7on suivante :<\/p>\n<pre class=\"lang:default decode:true\">private SemaphoreSlim _syncLock = new SemaphoreSlim(1);<\/pre>\n<p>Le 1\u00a0en param\u00e8tre indique que nous ne souhaitons q&rsquo;un seul acc\u00e8s concurent.<\/p>\n<p>Pour blocker les acc\u00e8s concurent on appelle la m\u00e9thode :<\/p>\n<pre class=\"lang:default decode:true \">await _syncLock.WaitAsync();<\/pre>\n<p>Pour rendre le block<\/p>\n<pre class=\"lang:default decode:true\">_syncLock.Release();<\/pre>\n<p>&nbsp;<\/p>\n<p>Le code final qui fonctionne sans erreur ressemble maintenant \u00e0 ceci :<\/p>\n<p>A noter\u00a0 : l&rsquo;utilisation du try &#8230; finally pour assurer le d\u00e9verrouillage m\u00eame en cas d&rsquo;anomalies.<\/p>\n<pre class=\"lang:default decode:true \">public async Task&lt;string&gt; SaveImageInStorageAsync(string urlImage, object datas)\n{\n    if (!String.IsNullOrEmpty(urlImage) &amp;&amp; datas is byte[])\n    {\n        string id = GetIdStorage(urlImage, savedName);\n        await _syncLock.WaitAsync();\n        try\n        {\n            var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;\n            var folder = await localFolder.CreateFolderAsync(\"DataCache\", Windows.Storage.CreationCollisionOption.OpenIfExists);\n            var file = await folder.CreateFileAsync(id, Windows.Storage.CreationCollisionOption.ReplaceExisting);\n            var stream = await file.OpenStreamForWriteAsync();\n            using (var outStream = stream)\n            {\n                var dataWriter = new Windows.Storage.Streams.DataWriter(outStream.AsOutputStream());\n                dataWriter.WriteBytes(datas as byte[]);\n                await dataWriter.StoreAsync();\n                await dataWriter.FlushAsync();\n                outStream.Dispose();\n                return id;\n            }\n        }\n        finally\n        {\n            _syncLock.Release();\n        }\n    }\n    else\n        return String.Empty;\n}\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Voici donc un m\u00e9canisme fort utile pour am\u00e9liorer la r\u00e9activit\u00e9 de vos applications Windows et Windows Phone<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Ecriture dans l&rsquo;isolated Storage d&rsquo;un fichier image Il est parfois fort utile de sauvegarder les images provenant d&rsquo;un serveur HTTP dans un cache afin d&rsquo;\u00e9viter de les charger \u00e0 chaque fois. En impl\u00e9mentant\u00a0ce syst\u00e8me de cache en asynchrone, je me suis rendu compte de plusieurs probl\u00e8mes causant syst\u00e9matiquement un UnauthorizedAccessException: Access is denied (0x80070005).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59,62,63],"tags":[68,69,70,132,133,134,58,8],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Bratched\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Bratched.fr | On parle Windows, C#, Apple, Android, Js, ...\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2014-11-23T22:55:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2014-11-23T22:55:35+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#article\",\"name\":\"Mise en cache d\\u2019image dans l\\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr\",\"headline\":\"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim\",\"author\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/author\\\/adminced\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/dev.bratched.fr\\\/fr\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2014\\\/11\\\/IsolatedStorage.png\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#articleImage\"},\"datePublished\":\"2014-11-24T00:55:35+01:00\",\"dateModified\":\"2014-11-24T00:55:35+01:00\",\"inLanguage\":\"fr-FR\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#webpage\"},\"articleSection\":\"Universal Apps, Windows 8, Windows Phone, async, await, BitmapImage, Flush, FlushAsync, SemaphoreSlim, Universal apps, XAML\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bratched.com\\\/fr\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/category\\\/universal-apps-3\\\/#listItem\",\"name\":\"Universal Apps\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/category\\\/universal-apps-3\\\/#listItem\",\"position\":2,\"name\":\"Universal Apps\",\"item\":\"https:\\\/\\\/bratched.com\\\/fr\\\/category\\\/universal-apps-3\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#listItem\",\"name\":\"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#listItem\",\"position\":3,\"name\":\"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/category\\\/universal-apps-3\\\/#listItem\",\"name\":\"Universal Apps\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/#organization\",\"name\":\"Bratched.fr\",\"description\":\"On parle Windows, C#, Apple, Android, Js, ...\",\"url\":\"https:\\\/\\\/bratched.com\\\/fr\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/author\\\/adminced\\\/#author\",\"url\":\"https:\\\/\\\/bratched.com\\\/fr\\\/author\\\/adminced\\\/\",\"name\":\"Bratched\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/05352dcd40ece2c42e5ae2dd683b460b?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Bratched\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#webpage\",\"url\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/\",\"name\":\"Mise en cache d\\u2019image dans l\\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr\",\"inLanguage\":\"fr-FR\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/2014\\\/11\\\/24\\\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/author\\\/adminced\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/author\\\/adminced\\\/#author\"},\"datePublished\":\"2014-11-24T00:55:35+01:00\",\"dateModified\":\"2014-11-24T00:55:35+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/bratched.com\\\/fr\\\/\",\"name\":\"Bratched.fr\",\"description\":\"On parle Windows, C#, Apple, Android, Js, ...\",\"inLanguage\":\"fr-FR\",\"publisher\":{\"@id\":\"https:\\\/\\\/bratched.com\\\/fr\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr","description":"","canonical_url":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#article","name":"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr","headline":"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim","author":{"@id":"https:\/\/bratched.com\/fr\/author\/adminced\/#author"},"publisher":{"@id":"https:\/\/bratched.com\/fr\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/dev.bratched.fr\/fr\/wp-content\/uploads\/sites\/2\/2014\/11\/IsolatedStorage.png","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#articleImage"},"datePublished":"2014-11-24T00:55:35+01:00","dateModified":"2014-11-24T00:55:35+01:00","inLanguage":"fr-FR","mainEntityOfPage":{"@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#webpage"},"isPartOf":{"@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#webpage"},"articleSection":"Universal Apps, Windows 8, Windows Phone, async, await, BitmapImage, Flush, FlushAsync, SemaphoreSlim, Universal apps, XAML"},{"@type":"BreadcrumbList","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr#listItem","position":1,"name":"Home","item":"https:\/\/bratched.com\/fr","nextItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr\/category\/universal-apps-3\/#listItem","name":"Universal Apps"}},{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr\/category\/universal-apps-3\/#listItem","position":2,"name":"Universal Apps","item":"https:\/\/bratched.com\/fr\/category\/universal-apps-3\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#listItem","name":"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim"},"previousItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#listItem","position":3,"name":"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim","previousItem":{"@type":"ListItem","@id":"https:\/\/bratched.com\/fr\/category\/universal-apps-3\/#listItem","name":"Universal Apps"}}]},{"@type":"Organization","@id":"https:\/\/bratched.com\/fr\/#organization","name":"Bratched.fr","description":"On parle Windows, C#, Apple, Android, Js, ...","url":"https:\/\/bratched.com\/fr\/"},{"@type":"Person","@id":"https:\/\/bratched.com\/fr\/author\/adminced\/#author","url":"https:\/\/bratched.com\/fr\/author\/adminced\/","name":"Bratched","image":{"@type":"ImageObject","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/05352dcd40ece2c42e5ae2dd683b460b?s=96&d=mm&r=g","width":96,"height":96,"caption":"Bratched"}},{"@type":"WebPage","@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#webpage","url":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/","name":"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr","inLanguage":"fr-FR","isPartOf":{"@id":"https:\/\/bratched.com\/fr\/#website"},"breadcrumb":{"@id":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/#breadcrumblist"},"author":{"@id":"https:\/\/bratched.com\/fr\/author\/adminced\/#author"},"creator":{"@id":"https:\/\/bratched.com\/fr\/author\/adminced\/#author"},"datePublished":"2014-11-24T00:55:35+01:00","dateModified":"2014-11-24T00:55:35+01:00"},{"@type":"WebSite","@id":"https:\/\/bratched.com\/fr\/#website","url":"https:\/\/bratched.com\/fr\/","name":"Bratched.fr","description":"On parle Windows, C#, Apple, Android, Js, ...","inLanguage":"fr-FR","publisher":{"@id":"https:\/\/bratched.com\/fr\/#organization"}}]},"og:locale":"fr_FR","og:site_name":"Bratched.fr | On parle Windows, C#, Apple, Android, Js, ...","og:type":"article","og:title":"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr","og:url":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/","article:published_time":"2014-11-23T22:55:35+00:00","article:modified_time":"2014-11-23T22:55:35+00:00","twitter:card":"summary","twitter:title":"Mise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim | Bratched.fr"},"aioseo_meta_data":{"post_id":"782","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[],"defaultGraph":"","defaultPostTypeGraph":""},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 02:51:47","updated":"2025-06-04 03:21:15","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bratched.com\/fr\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bratched.com\/fr\/category\/universal-apps-3\/\" title=\"Universal Apps\">Universal Apps<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tMise en cache d\u2019image dans l\u2019isolated storage avec Windows XAML et SemaphoreSlim\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/bratched.com\/fr"},{"label":"Universal Apps","link":"https:\/\/bratched.com\/fr\/category\/universal-apps-3\/"},{"label":"Mise en cache d&rsquo;image dans l&rsquo;isolated storage avec Windows XAML et SemaphoreSlim","link":"https:\/\/bratched.com\/fr\/2014\/11\/24\/mise-en-cache-dimage-dans-lisolated-storage-avec-windows-xaml\/"}],"_links":{"self":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts\/782"}],"collection":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/comments?post=782"}],"version-history":[{"count":0,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts\/782\/revisions"}],"wp:attachment":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/media?parent=782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/categories?post=782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/tags?post=782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}