【问题标题】:WP8: C# app crashes while changing BitMapImageWP8:更改 BitMapImage 时 C# 应用程序崩溃
【发布时间】:2014-05-26 06:58:04
【问题描述】:

好的,我不知道是什么导致了我的应用程序崩溃,我根本不明白发生了什么。我将很快解释我的应用程序可以做什么以及我的问题是什么。 此外,我在这里几乎没有阅读任何关于此的主题,并且正在通过不同的谷歌网站点击我的方式。 我没有找到解决方案,所以我不得不问!

我将图像设置为背景 -> 工作正常。

我有一个 TextBlock,它每 15 秒显示一次不同的文本,由计时器控制,每个文本都保存在一个列表中! -> 工作正常。

我对该文本进行了淡入/淡出 -> 工作正常。

我在底部有一个应用程序栏 -> 工作正常。

用这种平静的代码链接一张明确的图片 -> 工作正常。

private void Appearance_Click(object sender, EventArgs e)
    {
         Hintergrund.Source = new BitmapImage(new Uri("/Pictures/StarsNight19.jpg",    UriKind.Relative));
    }

嗯,我有大约 20 个不同的图像,它们的名称几乎相同,保存在我项目的一个文件夹中。路径如代码片段所示:/Pictures/StarsNightXX.jpg

Build Action 设置为:CONTENT(基本上都试过了..)

复制到输出目录设置为:始终复制。

现在这是我的问题。

我将图像的名称保存在列表中。

        .....
        pictures.Add("StarsNight4.jpg");
        pictures.Add("StarsNight5.jpg");
        pictures.Add("StarsNight6.jpg");
        ....

我使用与以前相同的操作,希望它在单击我的应用程序栏中漂亮的小按钮时更改图像:

private void Appearance_Click(object sender, EventArgs e)
    {
        Random rnd = new Random();
        int next = rnd.Next(0, pictures.Count - 1);
        background.Source = new BitmapImage(new Uri("/Pictures/"+pictures.ElementAt(next), UriKind.RelativeOrAbsolute));
    }

BOOM 应用程序崩溃

我就是不知道问题出在哪里。

通过写一个如开头所示的显式名称来更改它效果很好......

也许有人可以告诉我列表是否导致问题? 我就是想不通。

“循环”也不行:

int i = 0;
    private void Appearance_Click(object sender, EventArgs e)
    {
        if (i >= pictures.Count) i = 0; 
        background.Source = new BitmapImage(new Uri("/Pictures/" + pictures.ElementAt(i), UriKind.RelativeOrAbsolute));
        i++;

    }

因为我直接在我的 WP 上测试我的应用程序,所以我不知道我得到了什么样的异常。 没有办法在我的电脑上编译和测试它只是为了让你知道。

... 在这里,我失去了理智。

【问题讨论】:

  • 将调试目标设置为设备?当它在您的手机上部署应用程序时,它将附加调试器,您将获得有关异常的完整信息。
  • +1 @Sopuli 即使将应用程序部署到设备上,您也可以对其进行调试。另外,将pictures.ElementAt(next) 更改为pictures[next] 怎么样?
  • 我希望调试器能够正常工作。 IpOverUsbEnum 在启动后直接关闭。 @Eray Shashko 使用图片[next] 也不起作用,仍然崩溃。那么下一步:尝试启动调试器。我不知道这是可能的。我希望这能把事情弄清楚。谢谢:)
  • 我建议在加载新图像之前处理掉图像。
  • @Rynoh07 也不行。好吧,现在我最终使用了不错的小 switch 语句。对于我想通过单击那个粘性按钮来更改的少量图像,效果很好。非常感谢您的帮助,不胜感激!

标签: c# xaml windows-phone-8 bitmapimage crash


【解决方案1】:

请尝试此源代码,我已尝试处理在以下源中创建的对象,使用您的列表和其他代码,例如循环。

private static BitmapImage  bi = null;//this line at the top, not in function
private static Image  si = null;//this line at the top, not in function

if bi!=null)
            {
                bi.Dispose();
                bi = null;
            }

if si!=null)
            {
                si.Dispose();
                si = null;
            }

BitmapImage bi = new BitmapImage();
Image si = new Image();
bi.BeginInit();
bi.UriSource = new Uri(@"/img/img1.jpg",UriKind.RelativeOrAbsolute);
bi.EndInit();
si.Source = bi;

【讨论】:

  • 感谢您的帮助,但这也不起作用。现在我最终使用 switch 处理少量图像,效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多