BitmapFrame in another thread
        Posted  
        
            by Lasse Lindström
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Lasse Lindström
        
        
        
        Published on 2010-03-18T12:09:43Z
        Indexed on 
            2010/03/18
            12:11 UTC
        
        
        Read the original article
        Hit count: 488
        
Hi
I am using a WPF BackgroundWorker to create thumbnails. My worker function looks like:
private void work(object sender, DoWorkEventArgs e)
{
  try
  {
     var paths = e.Argument as string[];
     var boxList = new List();
     foreach (string path in paths)
     {
        if (!string.IsNullOrEmpty(path))
        {
            FileInfo info = new FileInfo(path);
            if (info.Exists && info.Length > 0)
            {
               BitmapImage bi = new BitmapImage();
               bi.BeginInit();
               bi.DecodePixelWidth = 200;
               bi.CacheOption = BitmapCacheOption.OnLoad;
               bi.UriSource = new Uri(info.FullName);
               bi.EndInit();
               var item = new BoxItem();
               item.FilePath = path;
               MemoryStream ms = new MemoryStream();
               PngBitmapEncoder encoder = new PngBitmapEncoder();
               encoder.Frames.Add(BitmapFrame.Create(bi));
               encoder.Save(ms);
               item.ThumbNail = ms.ToArray();
               ms.Close();
               boxList.Add(item);
            }
          }
        }
        e.Result = boxList;
      }
      catch (Exception ex)
      { 
        //nerver comes here
      }
 }
When this fuction is finnished and before the BackgroundWorker "Completed" function is started, I can see on the output window on Vs2008, that a exception is generated. It looks like:
A first chance exception of type 'System.NotSupportedException' occurred in PresentationCore.dll
The number of exceptions generates equals the number of thumbnails to be generated.
Using "trial and error" I have isolated the problem to: BitmapFrame.Create(bi)
Removing that line (makes my function useless) also removes the exception.
I have not found any explanation to this,,, or a better method to create thumbnails i a background thread. Can anyone help me?
//lasse
© Stack Overflow or respective owner