Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我会在图片框中得到白色背景的大红色X,而不是动画gif?_C# - Fatal编程技术网

C# 为什么我会在图片框中得到白色背景的大红色X,而不是动画gif?

C# 为什么我会在图片框中得到白色背景的大红色X,而不是动画gif?,c#,C#,我在硬盘上检查了动画gif的创建,并在internet explorer中打开了它,它工作了 所以我不明白为什么我得到这个白色和大x红色 我使用了断点,到目前为止没有得到任何错误 此类中动画gif的实际创建是以下行号175: unfreez.MakeGIF(myGifList, previewFileName, 8, true); 并且动画gif是真实存在和创建的。在第210行中,我调用将动画gif加载到pictureBox的函数: pictureBoxImage(previewFileNam

我在硬盘上检查了动画gif的创建,并在internet explorer中打开了它,它工作了

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

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

此类中动画gif的实际创建是以下行号175:

unfreez.MakeGIF(myGifList, previewFileName, 8, true);
并且动画gif是真实存在和创建的。在第210行中,我调用将动画gif加载到pictureBox的函数:

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上运行,所以课程正常,但是图片盒上的显示由于某种原因不起作用。

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

总之:

  • 这是由控件在
    OnPaint
    事件中抛出异常引起的
  • 一旦抛出该控件,该控件将继续显示红色X,并跳过在绘制时触发。
  • 要进行调试,请将调试器设置为捕获公共语言运行时异常,然后执行您通常执行的任何操作以获取红色X。调试器将在发生错误的地方停止,从而允许您进行调查,并希望找到防止错误发生的方法

红色x和白色背景表示找不到文件…或者无法将内存流转换回gif。红十字是一种广义的“渲染失败”表示法,我经常看到它与DirectX一起使用。至于具体原因…问题出在我做的类top中:pictureBox1.Image.Dispose();当我把它标记为//时,它就开始工作了。但是,过了一些时候,我点击了按钮,使动画gif无法工作,它显示的是我在设计器中添加的默认pictureBox1图像。因此,出于某种原因,我需要在每次调用类时释放pictureBox来处理它。因此,一方面我认为我需要解决这个问题,另一方面,这也造成了问题。