Windows runtime 使用Lumia Imaging SDK渲染图像时出现异常

Windows runtime 使用Lumia Imaging SDK渲染图像时出现异常,windows-runtime,windows-phone-8.1,lumia-imaging-sdk,Windows Runtime,Windows Phone 8.1,Lumia Imaging Sdk,在我的WP8.1应用程序中,我尝试使用Lumia(以前的诺基亚)图像SDK裁剪图像。使用FileOpenPicker检索图像: public async void ContinueFileOpenPicker(Windows.ApplicationModel.Activation.FileOpenPickerContinuationEventArgs args) { if (args.Files.Count > 0) { _stream = await args.F

在我的WP8.1应用程序中,我尝试使用Lumia(以前的诺基亚)图像SDK裁剪图像。使用
FileOpenPicker
检索图像:

public async void ContinueFileOpenPicker(Windows.ApplicationModel.Activation.FileOpenPickerContinuationEventArgs args) {
    if (args.Files.Count > 0) {
        _stream = await args.Files[0].OpenAsync(Windows.Storage.FileAccessMode.Read);
        _bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        await _bitmapImage.SetSourceAsync(_stream);
        SelectedImage.Source = _bitmapImage;
    }
    else {
        Debug.WriteLine("Operation cancelled.");
    }
}
然后在按钮处理程序中应用过滤器(在用户选择裁剪区域后;尺寸仅用于测试目的):

RenderAsync()
调用引发异常:

System.Runtime.InteropServices.COMException occurred
HResult=-2147467259
Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
Source=mscorlib
ErrorCode=-2147467259

应用过滤器似乎相当简单。为什么会在这里失败?

您应该启用本机调试并查看输出窗口。您当前缺少真正的异常消息(尝试更具体)。异常消息字符串通过WinRT调用边界“走私”,只有一个HRESULT被正式传递(这里,E_FAIL)

这是Silverlight 8.1还是通用应用程序


我猜答案可能是您需要寻找/倒回流。可能是位置在末尾。

当你调用它时,你是在哪个线程上?嗯,GetImageAcceptButton_Click()和GetCroppedBitmapAsync()都是异步调用,所以它们各自在自己的(工作)线程上运行。我恐怕这个假设是错误的。您可能在UI/dispatcher线程上。异步并不意味着并发,它只是意味着该方法可能会在以后完成。要在线程池上实际发布工作,被调用的方法需要显式地这样做(例如,通过使用Task.Run)。所以基本上,异步方法的开头总是有一个同步部分。通常,它在第一次“等待”时变为异步。要记住的,谢谢。很高兴知道。我还查看了Threads窗口。为了详细说明,首先将流传递给Image元素。这可能已经将流读到了最后。这是一个通用的应用程序。谢谢你们,这似乎是关键。我添加了一个_stream.Seek(0),这样就消除了异常。现在图像没有显示,但这可能是因为我使用了错误的(虚拟)措施来运行它。下午需要仔细看看。但这似乎已经解决了这个问题。
System.Runtime.InteropServices.COMException occurred
HResult=-2147467259
Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
Source=mscorlib
ErrorCode=-2147467259