我已经阅读了很多关于Control.Invoke和Control.BeginInvoke的文章,了解到Invoke类似于
此外,我已经成功地调用控件方法,而没有使用新的对象数组来传递参数。为什么这样可以工作?更好的是,既然这能够工作,为什么我看到的所有例子都使用一个新的对象数组呢?
这是我一直看到和使用的内容:
但这也可以:
任何信息和评论都非常受欢迎... 预先感谢您。
SendMessage()
,而BeginInvoke则类似于PostMessage()
。然而我不明白通过new object[] { arg, arg, arg, ...}
传递的参数列表存储在哪里。在传统调用中,参数被推送到堆栈中并在被调用函数内部弹出,然后从堆栈中恢复调用帧,我假设释放任何对堆对象的引用,允许它们被收集。那么,Invoke
/BeginInvoke
的推送栈数据存储在哪里?方法调用退出后如何处理它?此外,我已经成功地调用控件方法,而没有使用新的对象数组来传递参数。为什么这样可以工作?更好的是,既然这能够工作,为什么我看到的所有例子都使用一个新的对象数组呢?
这是我一直看到和使用的内容:
BeginInvoke(FormReceiveEvent, new object[] { Event, Arg1, Arg2, Arg3 });
但这也可以:
BeginInvoke(FormReceiveEvent, Event, Arg1, Arg2, Arg3);
任何信息和评论都非常受欢迎... 预先感谢您。
IDisposable
接口的对象包含任何非托管资源,则这些资源也应该由对象的终结器释放,以便在对象在被收集之前未被处理时仍然会被释放。通常的模式是拥有一个Dispose(bool)
方法,而IDisposable.Dispose
方法调用Dispose(true)
,终结器调用Dispose(false)
。 - Sven