C# 由于对象的当前状态,操作无效

C# 由于对象的当前状态,操作无效,c#,windows-phone-8,nokia-imaging-sdk,lumia-imaging-sdk,C#,Windows Phone 8,Nokia Imaging Sdk,Lumia Imaging Sdk,我开始开发winphone和诺基亚图像sdk。我有两个功能 首先,我调用下面的函数将图像更改为灰色 private async void PickImageCallback(object sender, PhotoResult e) { if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null) { return; } using

我开始开发winphone和诺基亚图像sdk。我有两个功能

首先,我调用下面的函数将图像更改为灰色

 private async void PickImageCallback(object sender, PhotoResult e)
    {
        if (e.TaskResult != TaskResult.OK || e.ChosenPhoto == null)
        {
            return;
        }
            using (var source = new StreamImageSource(e.ChosenPhoto))
            {
                using (var filters = new FilterEffect(source))
                {
                    var sampleFilter = new GrayscaleFilter();
                    filters.Filters = new IFilter[] { sampleFilter };
                    var target = new WriteableBitmap((int)CartoonImage.ActualWidth, (int)CartoonImage.ActualHeight);
                    var renderer = new WriteableBitmapRenderer(filters, target);
                    {
                        await renderer.RenderAsync();  
                        _thumbnailImageBitmap = target;
                        CartoonImage.Source = target;
                    }
                }
            }
        SaveButton.IsEnabled = true;
    }
然后我调用函数将图像更改为二进制颜色

private async void Binary(WriteableBitmap bm_image)
    {
        var target = new WriteableBitmap((int)CartoonImage.ActualWidth, (int)CartoonImage.ActualHeight);
        MemoryStream stream= new MemoryStream();
        bm_image.SaveJpeg(stream, bm_image.PixelWidth, bm_image.PixelHeight, 0, 100);

        using (var source = new StreamImageSource(stream))
        {
            using (var filters = new FilterEffect(source))
            {
                var sampleFilter = new StampFilter(5, 0.7);
                filters.Filters = new IFilter[] { sampleFilter };

                var renderer1 =new WriteableBitmapRenderer(filters, target);
                {
                    await renderer1.RenderAsync();
                    CartoonImage.Source = target;
                }
            }
        }
    }
但是当它在第二个函数中运行到“wait render1.RenderAsync();”时,它就不起作用了。我怎样才能解决它。你能为我解释一下“等待”和“异步”是如何工作的吗


多谢各位

我在这里主要是猜测,因为我不知道您会遇到什么错误,但我很确定您的问题在于设置源代码。在创建StreamImageSource之前,是否已确保将内存流位置设置为开头(0)

尝试添加:

stream.Position = 0;
在创建StreamImageSource之前

与其尝试从可写位图创建内存流,我建议执行以下操作:

using Nokia.InteropServices.WindowsRuntime;

...

using (var source = new BitmapImageSource(bm_image.AsBitmap())
{
   ...
}

你能更具体地说,调用“不起作用”是怎么回事吗?至于async和Wait,网上有很多教程。从MSDN页面开始:是的,它运行成功了。非常感谢你!你能告诉我“等待”和“异步”是如何工作的吗?