【问题标题】:How to cache images from PictureBox in C# winform如何在 C# winform 中缓存 PictureBox 中的图像
【发布时间】:2020-06-29 14:44:43
【问题描述】:

我正在尝试从网站加载图像。它加载非常缓慢。每次选择它。任何缓存图像的方式。

picturebox1.ImageLocation = "http://example.com/Image.jpg";

那个表单会频繁打开很多次,现在每次打开表单,每次都在下载图片。没有必要增加流量。

是否可以告诉 PictureBox 缓存图像(就像浏览器一样),所以下次请求相同的图像时,它应该会快速加载。这可能吗?

   if (listBox1.SelectedIndex == 0)
        {
            richTextBox1.Text = "Explore any game with Dex";
            Image img = Image.FromFile("https://i.imgur.com/Jb6lTp1.png");
            pictureBox1.Image = img;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

它说不支持给定的路径格式

【问题讨论】:

  • @Martheen 是的。他给出的答案是行不通的
  • 什么是不起作用?向我们展示您的代码
  • 那个骗子的答案不应该这样使用。您应该创建自己的函数来处理 URL 的缓存,因此在新 URL 上保存到文件系统,并简单地将现有文件传递给现有 URL。

标签: c# winforms caching


【解决方案1】:

试试这个方法:

首先创建一个函数来检查文件是否存在。如果存在,则只需从本地路径加载文件,否则从 URL 下载文件并将其存储在本地。

//Function to validate the local cache file

    private Image load_image()
    {
       Image img=null;
        if(!(File.Exists(@"d:\samp.png")))
        {
            using (HttpClient httpclient= new HttpClient())
            {
                var response = httpclient.GetAsync(@"https://i.imgur.com/Jb6lTp1.png");
                if (!response.Result.IsSuccessStatusCode)
                {
                    return img;
                }
                using (var fs= new FileStream(@"d:\samp.png",FileMode.CreateNew))  // Path can be added as parameter of function
                {
                    response.Result.Content.CopyToAsync(fs);
                }
              
            }
        }
        img = Image.FromFile(@"d:\samp.png");
       return img;
    }
 
 //calling the function of click event

    private void button1_Click(object sender, EventArgs e)
    {

      if (listBox1.SelectedIndex == 0)
        {
        richTextBox1.Text = "Explore any game with Dex";
        pictureBox1.Image = load_image();
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        }
    }

注意:在需要时处理异常。根据需要在函数中使用参数

【讨论】:

    【解决方案2】:

    在Form1_Load 事件中使用 PictureBox 的Load 方法。还要确保 URL 有效。

    private void Form1_Load(object sender, EventArgs e)
    {
        pictureBox1.Load("https://www.nippon.com/en/ncommon/contents/japan-data/169591/169591.jpg");
    }
    

    【讨论】:

    • 那不保存图像。如果我选择别的东西然后那仍然需要时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2011-11-15
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多