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 に答える