首页 > 解决方案 > C# Async void 不执行所有行

问题描述

我有个问题。我创建了这个异步无效:

private async void AddImageToPreview(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
    {
        var image = (Image)e.NewItems[e.NewItems.Count - 1];

        var httpClient = new System.Net.Http.HttpClient();
        var bytes = await httpClient.GetByteArrayAsync("mysite.org/" + App.TemplateSource + (string)e.NewItems[e.NewItems.Count - 1]);
        Stream stream = new MemoryStream(bytes);

        bitmap = SKBitmap.Decode(stream);

        float x = (float)MemeCanvas.Width / 2;
        float y = (float)MemeCanvas.Height / 2;

        int NewDictionaryKey = SelectedMemeTemplateIDs.Count;
        MemesOnCanvas NewMeme = new MemesOnCanvas
        {
            //ResourceID = resourceID
        };

        SelectedMemeTemplateIDs.Add(NewDictionaryKey, NewMeme);
        UpdateMemeTemplateCollection();
        MemeCanvas.InvalidateSurface();                
    }
}

我用这条线调用:

HomePage.SelectedMemeCollection.CollectionChanged += AddImageToPreview;

现在我在该 void: 的第一行设置了一个断点,var image = (Image)e.NewItems[e.NewItems.Count - 1];并且该点被击中,但是当我在第二行设置断点时:var httpClient = new System.Net.Http.HttpClient();,它永远不会被击中......

我究竟做错了什么?

标签: c#asynchronous

解决方案


您必须检查e.NewItems集合中存储的内容

var image = (Image)e.NewItems[]如果引发异常并且您没有catch unhanded exception option在 VS 中打开它是可能的。

请更改为var image = e.NewItems.LastOrDefault();并重试。

在下一行中,您将e.NewItems[]item 转换为字符串(string)e.NewItems[e.NewItems.Count - 1]- 它肯定不会起作用

请检查存储在其中的内容e.NewItems,以确保您正确投射。

item 的类型是什么var item = e.NewItems.LastOrDefault()


推荐阅读