[delegate委托问题求助]为什么一个方法被执行了多次???

vpoint2009 2010-12-06 04:21:34
想在线程内调用主线程的一个textbox控件,所以用到代理的方法:

先声明一个委托:public delegate void delegate3();//定义委托

然后在其他线程内调用该委托的方法:Dispatcher.BeginInvoke(DispatcherPriority.Normal, new delegate3(方法));//方法是调用了主线程控件的方法

结果:运行第一次,成功,不关程序运行第二次,委托的方法被调用了2次,再运行的话以此类推,感觉每运行一次方法就被多委托一次。
----------------------------------------------
于是改写代码:

先声明一个委托:public delegate void delegate3();//定义委托

声明一个对象: delegate3 d3;

然后在Window_Loaded这个事件为d3添加方法:d3 = new delegate3(方法);

结果:跟上次一样。

请教各位大牛,这个问题是怎么回事,如果第一次失败还讲得通,第二次明明只在load里面赋值一次,为什么方法会被累加?

谢谢大家!
...全文
275 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-12-06
  • 打赏
  • 举报
回复
invoke操作
private void Form1_Load(System.Object sender, System.EventArgs e)
{
System.Threading.Thread td = new System.Threading.Thread(additem);
td.Start();
}
public delegate void addInvo();
public void additem()
{
if (ListView1.InvokeRequired == false) {
ListView1.Columns.Add("ID");
ListView1.Columns.Add("Data");
ListView1.Items.Add("0");
ListView1.Items(0).SubItems.Add("a");
ListView1.BackColor = Color.Yellow;
ListView1.View = View.Details;
} else {
addInvo del = new addInvo(additem);
ListView1.Invoke(del);
}
}
beargo 2010-12-06
  • 打赏
  • 举报
回复
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new delegate3(方法));//方法是调用了主线程控件的方法
??
试试
d3.BeginInvoke(...);
兔子-顾问 2010-12-06
  • 打赏
  • 举报
回复
你可以在委托的执行时通过中断,看看调用堆栈,是谁调用的。来检查问题。
vpoint2011 2010-12-06
  • 打赏
  • 举报
回复
求助了,这个问题束手无策,为什么一个方法被加载了多次呢???虽然用全局参数等手段可以避免多次运行,但是还是想知道为什么!!!谢谢大家!

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧