2

我尝试使用使用一些等待操作的方法编写一个类。这种情况使我将此方法定义为异步。但我不能从这个方法返回非空值。就我而言,BitmapImage。这是代码

public sealed class Thumbnailer
{
    public async BitmapImage GetThumbImageFromFile(StorageFile sourceFile)
    {
        StorageItemThumbnail thumb = await sourceFile.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView, 600, Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);
        IRandomAccessStream thumbStream = thumb;
        BitmapImage thumbPict = new BitmapImage();
        thumbPict.SetSource(thumbStream);
        return thumbPict;
    }
}

如何解决这个问题?

4

1 回答 1

10

但我不能从这个方法返回非空值

是的,你可以,但它必须是TaskTask<T>对于某些T. 因此,您可以将方法更改为:

public async Task<BitmapImage> GetThumbImageFromFile(StorageFile sourceFile)

异步方法的全部性质是您调用它,并且控制将(通常)在方法的整个主体完成之前返回给调用者 - 因此返回一个任务以指示稍后可用的结果的承诺上。当控制权返回给调用者时,没有返回BitmapImage。通过任务,调用者可以在图像可用时获取图像。(通常异步方法被其他异步方法调用,当然允许您等待返回的任务以获取值。)

在堆栈溢出答案的空间中简洁地描述异步是很困难的,但我建议你从头开始重新阅读异步/等待 - 在走得太远之前了解它的基本性质很重要。MSDN 异步页面是一个很好的起点。

于 2013-10-30T08:23:29.180 回答