如何将 BitmapSource 对象放入数组中而不会在函数范围之外变为 null?

How do I put a BitmapSource object into an array without it turning null outside function scope?

提问人:JoseAyeras 提问时间:4/2/2019 更新时间:4/2/2019 访问量:55

问:

简单地说......

private void LoadImage(object sender, EventArgs e){
    String path = null;
    Microsoft.Win32.OpenFileDialog oFD = new ...();
    if(oFD.showDialog == true){
        path = oFD.FileName;
        result = new BitmapImage(new Uri(path));
        Array.Resize(ref frames, frames.Length + 1);
        frames.Append<BitmapSource>(result);
    }
    Refresh();
}
private void Refresh(){
    BitmapSource bg = frames[curFrame]; //i.e. curFrame = 0;
}

我希望 bg 在调用 Refresh() 时不会为 null。我捕获了所有相关的异常,除了 bg 为 null,其中我不希望 bg 在程序执行时为 null。

C# WPF 图像 nullReferenceException

评论

1赞 Clemens 4/2/2019
你为什么不用一个而不是数组和(这很奇怪)?List<BitmapSource>Array.Resize
0赞 JoseAyeras 4/2/2019
对不起,我在混合范式时遇到了问题。另外,这个问题很快就要结束了,因为我发现array.append是让我感到悲伤的问题。
0赞 15ee8f99-57ff-4f92-890c-b56153 4/2/2019
更广泛地说,您应该在 LoadImage() 方法中放置一个断点,并在运行时单步执行它,检查每个步骤中的内容。你当然应该像 Clemens 建议的那样使用 List,但旧代码没有什么是你不能通过确定问题所在和方式来修复的。frames
0赞 JoseAyeras 4/2/2019
简单地说,将 frames[length - 1] 设置为结果,我得到了我想要的东西。是的,我确实在 LoadImage() 中放置了一个断点并单步执行它,否则我什至不会首先问这个问题,因为实际上我的代码有更多的行。

答:

0赞 JoseAyeras 4/2/2019 #1

在这种情况下,调用 Array.Append(object) 是我出现问题的原因。我不知道它是做什么用的,但我假设(错误地)它将一个对象附加到任何数组的末尾。

我用以下内容替换了那行,我的代码按我的意图运行。

frames[frames.Length - 1] = result;

评论

0赞 Clemens 4/2/2019
更好的是:声明为可调整大小的集合:.然后只需致电framesprivate List<BitmapSource> frames = new List<BitmapSource>();frames.Add(result);