0

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

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

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

奇怪的是,该点之后的行永远不会被命中(我在那里设置的断点永远不会停止执行)。

这是课程:

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];
}

我对异步/等待很陌生,我似乎无法弄清楚这一点。

我需要从 PixelData 类中的某个接口继承吗?我需要将结果转换为另一种类型吗?为什么下一行永远不会被执行?

4

1 回答 1

0

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

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

像这样的东西:

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

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

于 2013-03-02T01:53:27.450 回答