【发布时间】:2020-01-05 19:26:19
【问题描述】:
我有问题。我创建了这个异步 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;
现在我在该空白处的第一行设置了一个断点:var image = (Image)e.NewItems[e.NewItems.Count - 1];,该点被命中,但是当我在第二行设置断点:var httpClient = new System.Net.Http.HttpClient(); 时,它永远不会被命中......
我做错了什么?
【问题讨论】:
-
你用的是什么版本的visual studio?
-
另外,我看到您将
e.NewItems[e.NewItems.Count - 1]转换为Image和string,您的收藏实际上包含什么? -
如果
var image = (Image)e.NewItems引发异常并且您没有在 VS 中打开catch unhanded exception option是可能的。请将其更改为var image = e.NewItems.LastOrDefault();并重试。在下一行中,您将 e.NewItems 项目转换为字符串(string)e.NewItems[e.NewItems.Count - 1]- 它不起作用。 -
太棒了。您应该能够通过输入
e.NewItems[e.NewItems.Count - 1].Value来检索您的图像,并通过输入e.NewItems[e.NewItems.Count - 1].Key来检索您的文件路径。 -
这是重要的一行
CollectionChanged (this, new NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Add, new KeyValuePair<TKey, TValue> (key, value)));您正在使用new KeyValuePair调用该事件。因此,要在事件处理程序中获取图像和字符串,您必须执行var pair = (KeyValuePair<string, Image>) e.NewItems.Last(); var image = pair.Value; var path = pair.Key;
标签: c# asynchronous