gpt4 book ai didi

c# - 后台创建 BitmapImage

转载 作者:行者123 更新时间:2023-11-30 21:04:50 25 4
gpt4 key购买 nike

我正在尝试在后台线程 (BackgroundWorker) 中创建一个 BitmapImage,但我的函数只立即返回 null,并且没有进入 Deployment.Current.Dispatcher.BeginInvoke。当我在 UI 线程中使用这个函数时,一切都很好。文件路径正确(是.jpg图片)

public static BitmapImage convertFileToBitmapImage(string filePath)
{
BitmapImage bmp = null;
Uri jpegUri = new Uri(filePath, UriKind.Relative);
StreamResourceInfo sri = Application.GetResourceStream(jpegUri);

Deployment.Current.Dispatcher.BeginInvoke(new Action( ( ) =>
{

bmp = new BitmapImage();
bmp.SetSource(sri.Stream);

}));
return bmp;
}

最佳答案

问题是您使用 Dispatcher.BeginInvoke它将在 UI 线程上异步运行任务,无法保证在您从函数返回时位图将被初始化。如果你需要立即初始化它,你应该使用 Dispatcher.Invoke所以这一切都是同步发生的。

更新

错过了你的标签,因为它是 Windows Phone,但是,同样的问题仍然存在,你没有给你的应用程序足够的时间来初始化位图。你也许可以使用 AutoResetEvent在从方法返回之前等待创建位图,例如

public static BitmapImage convertFileToBitmapImage(string filePath)
{
BitmapImage bmp = null;
Uri jpegUri = new Uri(filePath, UriKind.Relative);
StreamResourceInfo sri = Application.GetResourceStream(jpegUri);
AutoResetEvent bitmapInitializationEvt = new AutoResetEvent(false);
Deployment.Current.Dispatcher.BeginInvoke(new Action(() => {
bmp = new BitmapImage();
bmp.SetSource(sri.Stream);
bitmapInitializationEvt.Set();
}));
bitmapInitializationEvt.WaitOne();
return bmp;
}

关于c# - 后台创建 BitmapImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12068804/

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