You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# UWP(VS2019)程序重复运行结果不一致问题求助

问题分析与解决方案

结合你描述的不稳定现象、代码细节以及已标记解决的提示,我来梳理下核心问题和对应的修复方案:

1. 问题根源

你的程序出现时好时坏的情况,主要来自两个关键问题:

  • UI初始化时机错误:在MainPage构造函数中直接调用绘制逻辑时,MyCanvas还未完成布局初始化,此时设置Canvas.TopProperty和Canvas.LeftProperty的坐标值,无法被布局系统稳定解析,最终导致所有图片坐标重合。
  • 图片加载的异步不确定性:默认情况下BitmapImage采用DelayCreation延迟加载策略,部分图片在被添加到Canvas时还未完成源加载,就会出现“未设置源”的情况。

2. 修复方案

调整UI操作时机

把绘制图片的逻辑移到MainPage的Loaded事件中,此时所有UI元素已经完成初始化和布局,坐标设置会稳定生效:

public MainPage()
{
    this.InitializeComponent();
    // 订阅Loaded事件,等待UI完全初始化后再绘制
    this.Loaded += MainPage_Loaded;
}

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    DrawSomeImages();
}

void DrawSomeImages()
{
    for (int iCt1 = 0; iCt1 < 5; iCt1++)
    {
        for (int iCt2 = 0; iCt2 < 5; iCt2++)
        {
            makeImage(iCt1, iCt2);
        }
    }
}

优化图片加载逻辑

修改makeImage方法,强制BitmapImage立即加载图片源,避免延迟导致的图片丢失:

void makeImage(int inTop, int inLeft)
{
    try
    {
        Image img1 = new Image();
        var bitmap = new BitmapImage();
        bitmap.UriSource = new Uri("ms-appx:///Assets/SmileyAngry.png");
        // 关闭延迟加载,强制立即加载图片资源
        bitmap.CreateOptions = BitmapCreateOptions.None;
        img1.Source = bitmap;
        img1.Width = 220;
        img1.Height = 220;
        // 明确转换为double类型,避免隐式转换可能的异常
        img1.SetValue(Canvas.TopProperty, (double)(inTop * 38));
        img1.SetValue(Canvas.LeftProperty, (double)(inLeft * 39));
        MyCanvas.Children.Add(img1);
    }
    catch (Exception ex)
    {
        string thisProc = System.Reflection.MethodBase.GetCurrentMethod().ToString();
        Debug.WriteLine($"Error Message: {ex.Message} In {thisProc}");
    }
}

3. 额外提示(针对内存泄漏排查)

后续实现批量删除按钮时,要注意:

  • 删除图片时,务必从MyCanvas.Children中移除对应的Image对象,同时如果有集合存储这些图片实例,也要同步移除,避免残留引用导致内存泄漏。
  • 可以使用VS2019自带的内存分析工具监控内存变化,验证删除操作是否彻底。

内容的提问来源于stack exchange,提问作者ScCrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:02:30