Повторное создание URI растрового изображения - PullRequest
0 голосов
/ 21 марта 2019

У меня есть метод, который вызывается постоянно, чтобы изменить источник изображения в окне с помощью WPF. Это работает нормально, но я определенно не обучен этому и только начинаю.

private void UpdateLBUImage(int val)
{
    if (val == 1)
    {
        //Bitmap Creation
        var gc = new Uri("pack://application:,,,/Images/check.png");
        var gcb = new BitmapImage(gc);
        StatusImage.Source = gcb;
    }
    else
    {
        //Bitmap Creation
        var rx = new Uri("pack://application:,,,/Images/redx.png");
        var rxb = new BitmapImage(rx);
        StatusImage.Source = rxb;
    }
}

У меня вопрос: я воссоздаю растровое изображение снова и снова? Это плохо или это вызовет проблемы в моем приложении?

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Вы создаете новый BitmapImage каждый раз, когда вызывается ваш метод. Если Uris не меняется, вы можете определить два статических поля, чтобы этого не происходило:

private static readonly BitmapImage gcb = new BitmapImage(new Uri("pack://application:,,,/Images/check.png"));
private static readonly BitmapImage rxb = new BitmapImage(new Uri("pack://application:,,,/Images/redx.png"));
private void UpdateLBUImage(int val)
{
    if (val == 1)
    {
        StatusImage.Source = gcb;
    }
    else
    {
        StatusImage.Source = rxb;
    }
}

Тогда будет создано только два BitmapImage объекта, независимо от того, сколько раз вызывается метод UpdateLBUImage.

0 голосов
/ 21 марта 2019

мм8 говорит правду)

Но почему бы вам не сделать что-то вроде этого:

   <Image>
    <Style TargetType="Image">
        <Setter Property="Source" Value="path1"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding SomeBoolFlag}" Value="True">
                <Setter Source="path2"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Image>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...