0

Task< PixelData > を返すメソッドがあります。

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

メソッドが完了する (そして null 以外の値を返す) ことを (デバッガーから) 確認しましたが、実行が返されたときに myObject.pixelData は null のままです。

不思議なことに、そのポイントの直後の行にヒットすることはありません (そこに設定したブレークポイントが実行を停止することはありません)。

クラスは次のとおりです。

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 クラスの特定のインターフェイスから継承する必要がありますか? 結果を別の型にキャストする必要がありますか? 次の行が実行されないのはなぜですか?

4

1 に答える 1

0

原因は.NET4.5の隠された不可解な側面であるか、バグであると強く疑っています。

とにかく、私にとっての回避策は、非同期呼び出しを行ってファイルを親クラスにロードし、次の行でそれを取得することでした。

このようなもの:

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

クラスのレイアウトは少し強く型付けされていますか?はい。これは、ページを切り替えるたびにXAMLがクラスを消去するため、リロードを回避するためにすべてを親クラスに格納する必要があるためです。

于 2013-03-02T01:53:27.450 に答える