gpt4 book ai didi

c# - WPF 图像源不更新图像

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:39 25 4
gpt4 key购买 nike

我正在尝试在我的 WPF 应用程序中显示旋转广告。当我加载应用程序时,GetNewAd() 方法会正确显示广告。当我尝试通过再次调用我的 GetNewAd() 方法来更新广告时,chatHost 返回新广告,但图像不会在 UI 中更新。我试过在没有动画的情况下更新图像,但我仍然遇到同样的问题。我在这里缺少什么?

public class ncWindow
{
public ncWindow(Grid grid)
{
imgAd = new Image();
imgAd.Margin = new Thickness(2,2,2,2);
imgAd.HorizontalAlignment = HorizontalAlignment.Left;
imgAd.MouseDown += imgAd_MouseDown;

adTimer.Interval = 60000;
adTimer.Elapsed += adTimer_Elapsed;
adTimer.AutoReset = true;
adTimer.Start();

grid.Children.Add(imgAd);
}

public void GetNewAd()
{
DisplayedAd = chatHost.GetNewAd();

debug.Print("GetNewAd: " + DisplayedAd.VendorName + ", ImageData.Length = " + DisplayedAd.ImageData.Length);

BitmapImage image = new BitmapImage();
if (DisplayedAd.ImageData!=null && DisplayedAd.ImageData.Length>0)
{
using (var mem = new MemoryStream(DisplayedAd.ImageData))
{
mem.Position = 0;
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = mem;
image.EndInit();
}
}
else
return;

image.Freeze();
imgAd.Source = image;
}

private void adTimer_Elapsed(object source, ElapsedEventArgs e)
{
GetNewAd();
}
}

最佳答案

如果调用您的 GetNewAd() 方法的计时器不是 DispatcherTimer,您将必须明确调用图像控件的 Source< 的分配 UI线程中的属性:

image.Freeze(); // necessary for cross-thread access

imgAd.Dispatcher.BeginInvoke(new Action(() => imgAd.Source = image));

关于c# - WPF 图像源不更新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34548144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com