我已经阅读了很多关于 Control.Invoke 和 Control.BeginInvoke 并了解 InvokeSendMessage()
和BeginInvoke
is like PostMessage()
,但我不明白传递的参数列表new object[] { arg, arg, arg, ...}
存储在哪里。在常规调用期间,参数被压入堆栈并在被调用函数中弹出,然后在退出后从堆栈中恢复调用帧,我假设释放对任何堆对象的任何引用,允许它们被收集。那么,Invoke
/BeginInvoke
存储的推送堆栈日期在哪里?一旦被调用的方法退出,它是如何处理的?
此外,我已经成功调用了一个控制方法,而没有使用传递参数加载一个新的对象数组。为什么会这样?更好的是,既然它确实有效,为什么我见过的所有例子都用一个新的对象数组来展示它?
这是我一直看到和使用的:
BeginInvoke(FormReceiveEvent, new object[] { Event, Arg1, Arg2, Arg3 });
但这也有效:
BeginInvoke(FormReceiveEvent, Event, Arg1, Arg2, Arg3);
任何信息和意见总是受到赞赏...
提前致谢。