Control的Invoke和BeginInvoke
前提条件是:Control的BeginInvoke是在UI线程上调用的,代码示例如下: 
 private   delegate   void   beginInvokeDelegate(); 
 private   void   beginInvokeMethod(){ 
 //代码段C 
 }   
 private   void   but_click(....){ 
 //代码段A 
 this.BeginInvoke(new   beginInvokeDelegate(beginInvokeMethod)); 
 //代码段B 
 } 
 问题是ABC有没有严格的执行顺序。我认为是ABC 
 比如我代码段B写为MessageBox.Show( "B "); 
 代码段C写为MessageBox.Show( "C "); 
 这时会先弹出C,再弹出B.但我认为这是因为Show会弹出模态对话框   
 如果我这样 
 private   string   result; 
 代码段B写result+=    "B "; 
 代码段C写result+= "C "; 
 结果就是BC 
 或者我在B和C初都sleep(); 
 不管谁的时间长,都是B先执行。   
 因此我想问下: 
 (1)问题是ABC有没有严格的执行顺序。 
 (2)如果有,怎么解释这3种情况呢。 
 (3)Invoke和BeginInvoke和UI的消息处理有什么关系吗? 
 希望大家讨论下,也帮菜鸟学习下。谢谢 
 另:我写了篇blog...         whssunboy.cnblogs.com里边有比较详细的介绍
------解决方案--------------------A先执行,BC的顺序不定 
 BeginInvoke是异步执行的,相当于新开个线程去执行,而Invoke是同步的,要等到它执行完毕后才执行后面的代码。如果你将BeginInvoke改为Invoke,那么执行顺序一定是ACB
------解决方案--------------------BeginInvoke是异步执行的,相当于新开个线程去执行   
 这句话说得很正确阿。这种委托方式本来就是用于跨线程UI调用。beginInvoke即为异步调用,怎么可能不开线程,lz基本功还要补补。 
 还有既然是新线程操作,不稳定是肯定的,不然我们多线程程序干吗还要同步和琐,大家都按照次序一个一个来好了。就因为不稳定所以才要程序员在代码上加以控制,这才是多线程程序的难点。