Перезапустите программу и получите другие результаты C# UWP vs2019 - PullRequest
0 голосов
/ 19 января 2020

Проблема решена. Смотрите комментарии от FayWang ниже.

Добавлена ​​информация.

ОК. Я добавил код для удаления элементов. Удаление (по одному). При просмотре одного изображения ... все 25 создаются в одном месте. Проблема в Sub для создания новых изображений. Некоторые из них не имеют изображения, так как источник не был установлен. Не объясняет, почему они все имеют одинаковые координаты. И тогда следующая загрузка может работать нормально или нет.


Я, вероятно, буду чувствовать себя действительно глупо, но ....

Я только что создал быструю и короткую программу ( C# UWP VS 2019). Он собирается построить 25 изображений на экран. Я собирался добавить кнопку удаления их всех (пытаясь найти утечку памяти) и добавить их обратно, но так и не дошло.

Программа не компилирует ошибок. Я запускаю это. Обычно вместо 25 изображений я ВИДЮ 1. При первом запуске. Просто запустите его снова (без перестройки или изменения кода), и я могу получить 25. Я не могу сказать, что произойдет.

После последней сборки за 10 запусков я получил 1, 25, 1, 25, 25, 1, 25, 25, 25, 1

Также на 1 изображении. Кажется, они находятся в разных местах.

Я помещаю полный код ниже. Я часто делаю ошибки. Но это просто повторный запуск кода.

Кроме того, я только что переустановил Visual studio сегодня утром.

One Smiley


enter image description here


Сначала Xaml внутри тега Page, тогда код позади

<Grid>
    <Canvas x:Name="MyCanvas">
        <Rectangle x:Name="CutCopyRect"
                    Height="980" Width="1480"
                    Fill="LemonChiffon" 
                    Canvas.Left="10" Canvas.Top="10"/>
    </Canvas>

    public MainPage()
    {  this.InitializeComponent();
        DrawSomeImages();
    }

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

    void makeImage(int inTop, int inLeft)
    {   try
        { 
            Image img1 = new Image();
            img1.Source = new BitmapImage(new Uri("ms-appx:///Assets/SmileyAngry.png"));
            img1.Width = 220;
            img1.Height = 220;
            img1.SetValue(Canvas.TopProperty, (inTop * 38));
            img1.SetValue(Canvas.LeftProperty, (inLeft * 39));
            MyCanvas.Children.Add(img1);
        }
        catch (Exception ex)
        {
            string thisProc = System.Reflection.MethodBase.GetCurrentMethod().ToString();
            Debug.WriteLine("Error Message: ", ex.Message, "  In " + thisProc);
        }
    }

1 Ответ

0 голосов
/ 21 января 2020

Когда вы явно устанавливаете ширину изображения, лучше установить DecodePixelWidth свойство BitmapImage. он загрузит BitmapImage с указанной шириной. Помогает с использованием памяти и скоростью при загрузке больших изображений.

Image img1 = new Image(); 
BitmapImage bi = new BitmapImage(new Uri(this.BaseUri, "ms-appx:///Assets/Logo.png")); 
img1.Width = bi.DecodePixelWidth = 110; 
img1.Height = bi.DecodePixelHeight = 110;
img1.SetValue(Canvas.TopProperty, (inTop * 38));
img1.SetValue(Canvas.LeftProperty, (inLeft * 39));
img1.Source = bi;
MyCanvas.Children.Add(img1);
...