Ejemplo n.º 1
0
 private static void DownloadImage()
 {
     while (true)
     {
         ImageQueueInfo t = null;
         lock (ImageQueue.Stacks)
         {
             if (ImageQueue.Stacks.Count > 0)
             {
                 t = ImageQueue.Stacks.Dequeue();
             }
         }
         if (t != null)
         {
             Uri         uri   = new Uri(t.url);
             BitmapImage image = null;
             try
             {
                 if ("http".Equals(uri.Scheme, StringComparison.CurrentCultureIgnoreCase))
                 {
                     //如果是HTTP下载文件
                     WebClient wc = new WebClient();
                     using (var ms = new MemoryStream(wc.DownloadData(uri)))
                     {
                         image = new BitmapImage();
                         image.BeginInit();
                         image.CacheOption  = BitmapCacheOption.OnLoad;
                         image.StreamSource = ms;
                         image.EndInit();
                     }
                 }
                 else if ("file".Equals(uri.Scheme, StringComparison.CurrentCultureIgnoreCase))
                 {
                     using (var fs = new FileStream(t.url, FileMode.Open))
                     {
                         image = new BitmapImage();
                         image.BeginInit();
                         image.CacheOption  = BitmapCacheOption.OnLoad;
                         image.StreamSource = fs;
                         image.EndInit();
                     }
                 }
                 if (image != null)
                 {
                     if (image.CanFreeze)
                     {
                         image.Freeze();
                     }
                     t.image.Dispatcher.BeginInvoke(new Action <ImageQueueInfo, BitmapImage>((i, bmp) =>
                     {
                         if (ImageQueue.OnComplate != null)
                         {
                             ImageQueue.OnComplate(i.image, i.url, bmp);
                         }
                     }), new Object[] { t, image });
                 }
             }
             catch (Exception e)
             {
                 System.Windows.MessageBox.Show(e.Message);
                 continue;
             }
         }
         if (ImageQueue.Stacks.Count > 0)
         {
             continue;
         }
         autoEvent.WaitOne();
     }
 }
Ejemplo n.º 2
0
 private static void OnSourceWithSourceChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
 {
     ImageQueue.Queue((Image)o, (string)e.NewValue);
 }