3

我正在开发一个允许用户输入多个公司的 C# 程序,并且我正在尝试允许用户为每个公司使用一个图标(以及任务栏中的公司名称),以帮助他们轻松区分他们。

到目前为止,我有以下代码,它显示了图标的图片框以确认它是正确的图像,但是当我运行程序时,它在更改图像 3 或 4 次后因内存不足异常而崩溃。在阅读了此站点上类似问题的解决方案后,我尝试处理该图像,但似乎无法使其正常工作:

private void btnBrowse_Click(object sender, EventArgs e)
{
  openFileDialog1.InitialDirectory = "R:\\rightsort fulfilment\\charity icons";
  openFileDialog1.Title = "Choose an Icon";
  openFileDialog1.FileName = "";
  openFileDialog1.Filter = "Icon Files|*.ico";

  if (openFileDialog1.ShowDialog() != DialogResult.Cancel)
  {
    txtIcon.Text = openFileDialog1.FileName;
    pictureBox1.Image = Image.FromFile(txtIcon.Text);
    pictureBox1.Visible = true;
  }
  else
  {
    txtIcon.Text = "";
    pictureBox1.Visible = false;
  }
}

任何帮助将不胜感激!

4

2 回答 2

2

图像类继承自 IDisposable。每次用新图片替换时都需要调用 Dispose 方法来释放资源。

但是我不知道这是否是您问题的根源。您还可以尝试运行内存分析器并查看内存分配的确切位置和方式。

于 2012-05-09T14:24:27.343 回答
1

我会尝试在图片控件中处理旧图像。像这样的东西:

if (openFileDialog1.ShowDialog() != DialogResult.Cancel)
{
    txtIcon.Text = openFileDialog1.FileName;
    Image oldImage = pictureBox1.Image;
    pictureBox1.Image = Image.FromFile(txtIcon.Text);
    if (oldImage != null)
    {
        oldImage.Dispose();
    }
    pictureBox1.Visible = true;
 }
于 2012-05-09T16:28:11.107 回答