重新创建位图图像URI

时间:2019-03-21 14:13:07

标签: c# wpf

我有一个被连续调用的方法,该方法使用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 个答案:

答案 0 :(得分:1)

每次调用您的方法时,您都在创建一个新的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方法的次数如何。

答案 1 :(得分:0)

mm8说的是事实)

但是,为什么不想要这样:

   <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>