private delegate void FunHandle(int a,String str);
FunHandle FunDelegate; object SyncRoot;
private void button1_Click(object sender, System.EventArgs e)
{
FunDelegate = new FunHandle(Fun);
SyncRoot = new object();

object[] objArgs;
objArgs = new object[2];
int i = 15;
String str = "abcd"; objArgs[0] = (object)i;
objArgs[1] = (object)str; System.Threading.Monitor.Enter(SyncRoot);
BeginInvoke(FunDelegate,objArgs);
int x;
for (x = 0 ; x < 150 ; x ++)
{
x++;
}
MessageBox.Show("主线程" + x.ToString());
System.Threading.Monitor.Exit(SyncRoot);
}
private void Fun(int a,String str)
{
System.Threading.Monitor.Enter(SyncRoot);
int xx;
for (xx = 0 ; xx < 150 ; xx ++)
{
xx++;
}
MessageBox.Show("异步委托函数体内部。" + a.ToString() + "\n" + str + "\n" + xx.ToString());
System.Threading.Monitor.Exit(SyncRoot);

}
以上的代码是我用来测试的,变量命名基本能看明白。不明白的我根贴回复。//我一直的认识,异步委托就是系统对多线程包装了。当然,可能理解的不对,这次就是证明
这里的问题,就是:我执行过System.Threading.Monitor.Enter(SyncRoot);之后,才调用的异步委托,按道理,异步委托内部,发现互斥体被占用,会阻塞,等互斥体释放。但是,依然是先执行了委托内的代码,然后执行的button1中的代码,为什么?我自己唯一的答案就是,异步委托和调用它的仍然再同一线程?
就此,我可能已经充分表达了我的错误理解,希望大家帮助我吃透这个概念,最好能给予一个异步委托的比较清晰的例子,msdn上的看晕了。 ^_^