c# – 为什么我的事件处理程序会触发两次?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 为什么我的事件处理程序会触发两次?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2123字,纯文字阅读大概需要4分钟。
内容图文
嘿家伙我有一个艰难的时间试图解决这个问题我已经在3小时仍然无法找出为什么它这样做…这里是代码
private void Catagory_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int selectedCategoryId = categoryIdList[categoryListBox.SelectedIndex];
client.GetItemsAsync(selectedCategoryId);
client.GetItemsCompleted +=
new EventHandler<GetItemsCompletedEventArgs>(client_GetItemsCompleted);
}
void client_GetItemsCompleted(object sender, GetItemsCompletedEventArgs e)
{
itemIdList.Clear();
itemNameList.Clear();
itemNumberList.Clear();
itemDisplayList.Clear(); //Clears the Display List Items
if (e.Error == null)
{
itemIdList = e.ItemIDList;
itemNumberList = e.itemNumber;
itemNameList = e.Result;
for (int i = 0; i < itemIdList.Count; i++)
{
itemDisplayList.Add(new ItemDisplay { itemNumber = itemNumberList[i], itemName = itemNameList[i] });
}
//Populating the listbox controll with the itemDisplaylist...
Items.ItemsSource = itemDisplayList;
}
else
{
MessageBox.Show("Problem in getting the items list.");
}
}
当我第一次完美地改变类别时…完美地说我的意思是它调用函数GetItemsAsync(selectedCategoryId)并抓取结果并调用事件处理程序client_GetItemsCompleted()并且事件处理程序的内部工作原理就像它一样应该是,它用适当的数据设置列表并在列表框中显示itemNumber和itemName …但是当我再次更改类别以获得不同的项目时它不能正常工作,它正在做的是它清除列表并按预期填充列表,运行for循环并填充名为Items的listBox但由于某种原因它再次进入函数顶部并清空所有列表:/ …请告诉我为什么它再次执行该功能..当我再次选择另一个类别时,它执行事件处理程序3次,然后执行4次等等..任何人都知道它为什么这样做?我需要这个修复我的项目:(
解决方法:
每次执行此操作:
client.GetItemsCompleted +=
您为该事件添加了一个订阅者,因此第二次它将触发两次(第三次三次,等等).
在完成的方法中要么unsubscrice( – =):
void client_GetItemsCompleted(object sender, GetItemsCompletedEventArgs e)
{
try {
/* .... */
}
finally {
client.GetItemsCompleted -=
new EventHandler<GetItemsCompletedEventArgs>(client_GetItemsCompleted);
}
}
或在每次调用之前启动客户端对象.
var client = new ...();
client.GetItemsAsync(selectedCategoryId);
client.GetItemsCompleted +=
new EventHandler<GetItemsCompletedEventArgs>(client_GetItemsCompleted);
内容总结
以上是互联网集市为您收集整理的c# – 为什么我的事件处理程序会触发两次?全部内容,希望文章能够帮你解决c# – 为什么我的事件处理程序会触发两次?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。