Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
Arrays 尝试处理映像时应用程序崩溃_Arrays_Image_Crash_Dispose_Picturebox - Fatal编程技术网

Arrays 尝试处理映像时应用程序崩溃

Arrays 尝试处理映像时应用程序崩溃,arrays,image,crash,dispose,picturebox,Arrays,Image,Crash,Dispose,Picturebox,我正在创建一个包含两个PictureBox的应用程序,其中图像从一个数组加载,并在每个计时器滴答声中随机更改。我面临的问题是,有时无法加载图像,而将pictureBox留下一个小红十字。我读到我应该在加载新图像之前处理上一张图像(我是一个新手),但如果不在第一个滴答声中崩溃应用程序,我就无法让它工作。你能帮帮我吗 private void timer_Tick(object sender, EventArgs e) { index1 = rand.Next(0, pics

我正在创建一个包含两个PictureBox的应用程序,其中图像从一个数组加载,并在每个计时器滴答声中随机更改。我面临的问题是,有时无法加载图像,而将pictureBox留下一个小红十字。我读到我应该在加载新图像之前处理上一张图像(我是一个新手),但如果不在第一个滴答声中崩溃应用程序,我就无法让它工作。你能帮帮我吗

private void timer_Tick(object sender, EventArgs e)
    {
        index1 = rand.Next(0, pics.Length - 1);
        index2 = rand.Next(0, pics.Length - 1);
        pcb1.ImageLocation = pics[index1];
        pcb2.ImageLocation = pics[index2];
    }



try
{
    pcb1.Image.Dispose();
    pcb2.Image.Dispose();
    index1 = rand.Next(0, pics.Length - 1);
    index2 = rand.Next(0, pics.Length - 1);
    pcb1.ImageLocation = pics[index1];
    pcb2.ImageLocation = pics[index2];
}
catch (Exception)
{ 
    throw; 
}
-告诉我System.ArgumentException

可能的解决方案:

try
{
    private void timer_Tick(object sender, EventArgs e)
    {
        index1 = rand.Next(0, pics.Length);
        if (File.Exists(pics[index1]))
        {
            Image img1 = Image.FromFile(pics[index1]);
            pcb1.Image = img1;
        }
        index2 = rand.Next(0, pics.Length);
        if (File.Exists(pics[index2]))
        {
            Image img2 = Image.FromFile(pics[index2]);
            pcb2.Image = img2;
        }
    }
}
catch (OutOfMemoryException oomEx)
{
    MessageBox.Show("Not a valid image.");
}
catch (Exception ex)
{
    //all others...respond appropriately
}

抛出了什么异常?如果你还没有用try/catch来包装它,并告诉我们它报告了什么。@DonBoitnott编辑,希望这就是你的意思。我是一个认真的新手。ImageLocation…pics[]是否包含路径列表?更改:index1=rand.Next(0,pics.Length-1);To:index1=随机下一步(0,图片长度);(第二个参数是独占的)。不确定此处是否需要Dispose(),因为您只是重新分配了一个值,而没有完全删除图像对象。@DonBoitnott string[]pics=System.IO.Directory.GetFiles(Environment.CurrentDirectory+@“\pics\lvl1”);删除-1没有帮助。我不知道如何解释某些图像没有加载(我检查了,文件夹中的每个图像都显示了,只是不总是)。是的,这确实停止了崩溃和错误加载,但现在刷新率非常不一致。我们该怎么办?顺便说一句,谢谢你的帮助,非常感谢。:)这将是文件加载时间。你的休息时间是几点?您预计会找到多少文件/图像?你可以放慢速度。如果图像计数足够低,可以将图像预加载到列表或事件列表中。但是您必须小心,因为内存中的图像是不稳定的,并且最终可能会出现更多的引用错误。