问题已经answered in the comments。谢谢。
tl; dr version :我试图根据this同步进行异步运行,但它已经冻结了。
我有
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
哪种方法正常。
我需要将其更改为不同步,因此我尝试将其更改为this answer中提及的内容:
BitmapDecoder decoder = SyncDecoder(BitmapDecoder.CreateAsync(stream));
其中:
BitmapDecoder SyncDecoder(IAsyncOperation<BitmapDecoder> async) { return Task.Run(() => async.AsTask()).Result; }
或更长的(我认为相当的)版本:
BitmapDecoder SyncDecoder(IAsyncOperation<BitmapDecoder> async)
{
Func<Task<BitmapDecoder>> asLambda = () => async.AsTask();
Task<BitmapDecoder> asTask = Task.Run(asLambda);
asTask.Wait(); // freezes
return asTask.Result;
}
但是,SyncDecoder
永远不会返回。 (在第二个版本中,它冻结在Wait()
上。)
我尝试为IReadOnlyList<StorageFile>
(和storageFolder.GetFilesAsync()
)制作相同的方法, 的工作正常。所以 也应该在这里工作。但是没有。
我知道通常不应阻止UI线程,但我们需要修复现有代码。不承担大型重构项目。那么如何将代码转换为同步?