从等待访问任务内容

时间:2013-03-02 01:05:31

标签: c# .net windows-runtime windows-store-apps windows-store

我有一个返回Task<的方法PixelData>。

myObject.pixelData = await rootPage.GrabPixelData("mypic.png");

我已经确认(来自调试器)该方法完成(并返回一个非空值),但是当执行返回myObject时,pixelData仍为null。

Stangely,紧接在该点之后的线永远不会被击中(我设置的断点永远不会停止执行)。

这是班级:

public class PixelData
{
    public byte[] sourcePixels;
    public int sizeOfSourcePixels;
    public int imageWidth;
    public int imageHeight;
}

以下是被调用的方法:

public async Task<PixelData> GrabPixelData(string imageFileName)
{
    if (!ImageDictionary.ContainsKey(imageFileName))
    {
        // doesn't exist yet, so load it
        PixelData pd = await LoadPic(imageFileName);
        ImageDictionary.Add(imageFileName, pd);
    }

    var test = ImageDictionary[imageFileName];

    return ImageDictionary[imageFileName];
}

我是async / await的新手,我似乎无法想出这个。

我是否需要继承PixelData类中的某个接口?我需要将结果转换为其他类型吗?为什么下一行不会被执行?

1 个答案:

答案 0 :(得分:0)

我强烈怀疑原因是.NET 4.5的一些隐藏的,神秘的方面,或者它是一个错误。

无论如何,我的解决方法是进行异步调用以将文件加载到父类中,然后在下一行中获取它。

这样的事情:

await rootPage.LoadPixelData("mypic.png");
myobject.pixelData = rootPage.ImageDictionary["mypic.png"];
loadedFlag = true;

我的班级布局是否有点强类型?是。那是因为每次切换页面时XAML都会清除我的类,所以我必须将所有内容存储在父类中以避免重新加载。