.NET调用任意控件

时间:2011-03-10 15:37:06

标签: .net controls

我有一个方法,它接受一个.NET控件并调用它来调用它:

Form.Invoke(Target);

但是,我遇到过多次调用此方法的问题,由于时间或其他原因,表单上的表单句柄不存在,导致Invoke or BeginInvoke cannot be called on a control until the window handle has been created错误。在沮丧中,我开玩笑地将代码更改为:

MainForm.Invoke(Target);

其中MainForm是应用程序的主窗口(主窗体的表单句柄在启动时创建,并在应用程序的整个生命周期内保持活动状态)。我运行了所有测试并手动测试了应用程序,尽管在任何地方都使用它,但一切似乎都能正常工作。

所以我的问题是,调用特定控件的含义究竟是什么?总是调用你知道会激活的控件有什么缺点吗?如果没有,为什么.NET首先会对控件进行调用(而不仅仅是创建静态GuiThread.InvokeOnGuiThread(Blah);)?

1 个答案:

答案 0 :(得分:0)

关于SO的问题:Why is InvokeRequired preferred over WindowsFormsSynchronizationContext?将为您提供可能的答案和讨论,并解答您可能遇到的问题。

至于GuiThread.InvokeOnGuiThread(Blah);解释它如何与具有消息泵和管理窗口控件的多个线程一起工作(WindowsFormsSynchronizationContext通过在GUI线程上创建并附加到当前正在执行的线程来解决这个问题。 / p>