1

我在硬盘上检查了动画 gif 的创建,并在 Internet Explorer 中打开它,它工作正常。

所以我不明白为什么我得到这个白色的大 x 红色。

我使用了断点,到目前为止没有收到任何错误。

在这个类中真正创建的动画 gif 是第 175 行:

unfreez.MakeGIF(myGifList, previewFileName, 8, true);

并且动画 gif 是真实存在和创建的。在第 210 行中,我调用了将动画 gif 加载到图片框的函数:

pictureBoxImage(previewFileName);

这是我使用断点的 pictureBoxImage 函数,它没有显示任何错误:

public void pictureBoxImage(string pbImage)
{
    Image img2 = null;
    try
    {
        using (img = Image.FromFile(pbImage))
        {
            //get the old image thats loaded from the _memSt memorystream
            //and dispose it
            Image i = this.pictureBox1.Image;
            this.pictureBox1.Image = null;

            if (i != null)
                i.Dispose();

            //grab the old stream
            MemoryStream m = _memSt;

            //save the new image to this stream
            _memSt = new MemoryStream();
            img.Save(_memSt, System.Drawing.Imaging.ImageFormat.Gif);

            if (m != null)
                m.Dispose();

            //create our image to display
            img2 = Image.FromStream(_memSt);
        }

        if (img2 != null)
            pictureBox1.Image = img2;
        //label2.Text = numberOfFiles.ToString();
        //label6.Text = nameOfStartFile.ToString();
        //label4.Text = nameOfEndFile.ToString();
        //File.Delete(pbImage);
    }
    catch (Exception err)
    {
        Logger.Write("Animation Error >>>   " + err);
    }
}

想不通为什么?红色 x 和白色背景。

我没有将整个班级复制到这里,但如果需要,我会复制到这里,但动画 gif 制作得很好,并且可以在 Internet Explorer 上运行,所以班级正在工作,但由于某种原因,pictureBox 上的显示工作正常。

4

1 回答 1

2

肖恩·哈格里夫斯 (Shawn Hargreaves )对“厄运的大红色 X”有出色而简洁的描述。我发现它在处理突然显示红色“X”的 WinForm 组件的一般情况下非常有用。

总之:

  • 这是由控件从OnPaint事件中抛出异常引起的。
  • 一旦被抛出,该控件将继续显示红色 X 并跳过射击OnPaint.
  • 要进行调试,请将调试器设置为捕获公共语言运行时异常,然后执行您通常执行的任何操作以获取红色 X。调试器将在它发生的地方停止,让您进行调查并希望找到防止它的方法。
于 2015-04-22T21:23:58.320 回答