1

C#クラスに非同期メソッドがあります

namespace ImageHolder
{
    public sealed class BlankFilter
    public async Task<InMemoryRandomAccessStream> applyFilter()
    {
        inputStream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
        decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(inputStream);

        /* more code */
    }
}

WinJSクラスからこの関数を次のように呼び出しています

filter.applyFilter().then(function (memStream) {
            var msStream = MSApp.createStreamFromInputStream("image/jpeg", memStream);
            var imageURL = URL.createObjectURL(msSteam);
            id("imageInput").src = imageURL;

        });

ただし、これは機能せず、VisualStudioはリターンタイプをIAsyncActionに変更する必要があると文句を言います。それをすることも助けにはなりません。

では、WinJSコードから待機しているC#関数を呼び出す正しい方法は何ですか?

4

1 に答える 1

1

WinJS は、返すメソッドを呼び出すことができませんTask<T>。これは、async/await メソッドで得られるものです。エラーが示すように、戻り値の型を変更する (または新しいラッパー メソッドを作成する) 必要がありますIAsyncOperation<T>Task<T>からへの変換IAsyncOperation<T>は簡単です (AsAsyncOperation結果のタスクでいずれかを呼び出します)。

このブログ投稿には、この問題に関する詳細が記載されています。

于 2012-11-20T18:29:40.143 に答える