首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Invoke为何会多次执行

2012-09-18 
Invoke为什么会多次执行?C# codeint i 0delegate void dg()private void Test(){if (this.InvokeRequi

Invoke为什么会多次执行?

C# code
int i = 0;delegate void dg();private void Test(){   if (this.InvokeRequired)  {       dg callback = new dg(Test);       this.Invoke(callback);   }   else   {        i++;        Console(i.ToString());   }}


结果多次调用Test()每次执行分别显示 1,3,6,10,15。。。。。。

为什么不是1,2,3,4,5???重复执行了吗?

另外Invoke和BeginInvoke的区别是什么?

[解决办法]
结果多次调用Test()每次执行分别显示 1,3,6,10,15。。。。。。

为什么不是1,2,3,4,5???重复执行了吗?

自己去找i在什么地方调用了,必然你是你自己其它代码的问题。
[解决办法]
Invoke是阻塞当前线程的,BeginInvoke不会的。
你这段代码能执行?
[解决办法]
i的值肯定在别的方法中也被修改了,另外,BeginInvoke是异步调用,(异步是指相对于调用BeginInvoke的线程异步)它必须等调用它的方法内部的其他操作在UI线程上执行完了才会执行,而Invoke是同步的。
[解决办法]
BeginInvoke是相对于调用他的线程异步执行的,会等UI线程上的操作完才执行
[解决办法]
问题应该不在这几行代码中,应该在你线程中调用Test的代码有问题

热点排行