2012-11-20 52 views
1

等待调用C#方法我在C#类的异步方法已经从WinJS

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; 

     }); 

然而,这并不是工作和Visual Studio抱怨返回类型应该更改为IAsyncAction。这样做也没有帮助。

那么,调用一个等待WinJS代码的C#函数的正确方法是什么?

回答

1

WinJS无法调用返回Task<T>的方法 - 这是您使用异步/等待方法获得的方法。如错误所述,您需要将返回类型更改为IAsyncOperation<T>(或创建一个新的包装方法)。从Task<T>转换为IAsyncOperation<T>很简单(对结果任务调用AsAsyncOperation)。

这个blog post有关于这个问题的更多信息。

+0

谢谢卡洛斯。这个博客真的很有帮助。它可能错过了一件事..虽然..返回异步任务必须都是内部的职能。 WinRT不能暴露他们。 – Anz