wpf 试图更改图像,源导致异常

brjng4g3  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(103)

我试图在WPF中更改图像源,它抛出“System.InvalidOperationException”异常(“调用线程无法访问此对象,因为另一个线程拥有它。”),现在,我试图将代码放入Application.Current.Dispatcher.Invoke(Action)块中,但它仍然抛出错误,这可能与我试图从异步方法更改图像有关,如下所示:

// Calling ChangeImage here
public async void LocalKill()
{
    for (int i = 0; i < 12; i++)
    {
        sprite.ChangeImage("@$\"Resources\\Images\\Player\\PlayerDeath{i % 2 + 1}.png\"");
        await Task.Delay(1000 / 10);
    }
}

// In "Sprite" class
public void ChangeImage(string imagePath)
{
    var bitmap = BitmapFromPath(imagePath);

    // UI Objects need to be changed in an STA thread
    Application.Current.Dispatcher.Invoke(() => image.Source = bitmap);
}

我试着改变图像源,期望它改变图像的视觉,但相反,它抛出了错误

e4eetjau

e4eetjau1#

使用与Image元素关联的分派器,并在位图上调用Freeze()

public void ChangeImage(string imagePath)
{
    var bitmap = BitmapFromPath(imagePath);
    bitmap.Freeze();

    image.Dispatcher.Invoke(() => image.Source = bitmap);
}

相关问题