none
如何释放WPF窗体进程? RRS feed

  • 问题

  • 最近用wpf做了一个数据库应用程序,我将照片以二进制数据保存在数据里,本地查看时将照片读取并保存到本地的一个目录里然后以imagesource的方式显示在wpf的image控件里,但是关闭当前查看的wpf窗体后再次打开窗体则会显示进程无法访问文件,该文件正在被其他进程使用(the process cannot access the file c:\*****.jpg,because it used by another process

    如果在关闭窗体的时候释放对文件的占用呢

    2010年7月9日 1:21

答案

  • 我尝试用将图片再次读入内存,并使用ImageSourceConveter 将stream 转换为Imagesource ,但是却出现对引用的对象未实例化

    my= string myUrl = Environment.CurrentDirectory + "\\" +"01.jpg";

     

     System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(myUrl);

       MemoryStream stream = new MemoryStream();

      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

       ImageSourceConverter imagesourceConverter = new ImageSourceConverter();

       ImageBrush imagebrush = new ImageBrush();

       imagebrush .ImageSource = (ImageSource)imagesourceConverter.ConvertFrom(stream);

        this.btnPrint.Background = imagebrush;

     

     

    在 imagebrush .ImageSource = (ImageSource)imagesourceConverter.ConvertFrom(stream); 前添加下列语句:
    stream.Seek(0, SeekOrigin.Begin);

    • 已标记为答案 冷月 2010年7月12日 1:37
    2010年7月9日 8:55

全部回复

  • 你把你的图片以byte[]的形式读入内存,然后再用imagesource显示,比如:

    byte[] buff = File.ReadAllBytes("your image file");

    2010年7月9日 1:40
  • 我尝试用将图片再次读入内存,并使用ImageSourceConveter 将stream 转换为Imagesource ,但是却出现对引用的对象未实例化

    my= string myUrl = Environment.CurrentDirectory + "\\" +"01.jpg";

     System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(myUrl);

       MemoryStream stream = new MemoryStream();

      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

       ImageSourceConverter imagesourceConverter = new ImageSourceConverter();

       ImageBrush imagebrush = new ImageBrush();

       imagebrush .ImageSource = (ImageSource)imagesourceConverter.ConvertFrom(stream);

        this.btnPrint.Background = imagebrush;

    2010年7月9日 8:10
  • 我尝试用将图片再次读入内存,并使用ImageSourceConveter 将stream 转换为Imagesource ,但是却出现对引用的对象未实例化

    my= string myUrl = Environment.CurrentDirectory + "\\" +"01.jpg";

     

     System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(myUrl);

       MemoryStream stream = new MemoryStream();

      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

       ImageSourceConverter imagesourceConverter = new ImageSourceConverter();

       ImageBrush imagebrush = new ImageBrush();

       imagebrush .ImageSource = (ImageSource)imagesourceConverter.ConvertFrom(stream);

        this.btnPrint.Background = imagebrush;

     

     

    在 imagebrush .ImageSource = (ImageSource)imagesourceConverter.ConvertFrom(stream); 前添加下列语句:
    stream.Seek(0, SeekOrigin.Begin);

    • 已标记为答案 冷月 2010年7月12日 1:37
    2010年7月9日 8:55
  • 这个图片被缓存导致的.

    BitmapImage有个CacheOption属性, 改一下别缓存就Ok了.

    2010年7月9日 9:22
  • 感谢各位,根据各位的提示我已经实现了这个目标
    2010年7月12日 1:38