c# - 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();
,它永远不会被击中......
我究竟做错了什么?
解决方案
您必须检查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()
?
推荐阅读
- python - ValueError:这两个结构没有相同的嵌套结构
- tcp - 通过 Internet TCP IP 在两个 Rpi 之间传输数据
- excel - 选择您的 if 语句触发的单元格并在 vba 中选择该单元格
- forms - 可访问性:;表单标签错误,即使在选择菜单中有相应的 id
- node.js - 响应消失时 expressjs 下一个中间件的行为
- flutter - 从其他屏幕颤动访问商店 mobx
- java - 如何使用 onSavedInstance?
- python-3.x - ARIMA / SARIMAX 预测异常值
- php - 使用 php 显示远程服务器的磁盘使用数据
- google-analytics-api - 尝试将 Google 表格连接到 GA API 时出现错误消息