C# Button.PerformClick做什么?

C# Button.PerformClick做什么?,c#,.net,winforms,C#,.net,Winforms,我知道这可能是一个微不足道的问题,但我只是想知道调用而不是直接调用按钮的单击事件是否有任何好处。MSDN文档简单地说: 为按钮生成单击事件 这是否意味着它只是做了与调用按钮的单击事件相同的事情,还是有其他一些特殊的优势?对订阅事件一无所知的外部调用方不能简单地调用单击处理程序,并且事件不允许您获取有关订阅者的信息。因此,这种方法允许分离关注点,以便外部调用者可以“玩得很好” 此外: 它确保应用虚拟方法上的任何多态性 它应用任何规则-例如:按钮是否已禁用 如果您确实了解事件处理程序,并且不使用

我知道这可能是一个微不足道的问题,但我只是想知道调用而不是直接调用按钮的单击事件是否有任何好处。MSDN文档简单地说:

为按钮生成单击事件


这是否意味着它只是做了与调用按钮的单击事件相同的事情,还是有其他一些特殊的优势?

对订阅事件一无所知的外部调用方不能简单地调用单击处理程序,并且事件不允许您获取有关订阅者的信息。因此,这种方法允许分离关注点,以便外部调用者可以“玩得很好”

此外:

  • 它确保应用虚拟方法上的任何多态性
  • 它应用任何规则-例如:按钮是否已禁用

如果您确实了解事件处理程序,并且不使用多态性,也不关心它是否被禁用,而且你不必担心你还不知道的事件处理程序——那么,无论如何:只需调用事件处理程序方法。

它会为该按钮调用事件处理程序。MSDN对我来说似乎非常简单。
备注:可以调用此方法来引发单击事件。
我想知道确切原因会很有趣
PerformClick()
已存在。MSDN文档太模糊了。@JasonEvans单元测试?@dialer,我来这里是因为我的NUnit测试失败了,因为PerformClick()实际上没有执行单击。当我直接调用处理程序时,测试通过了。我的猜测是,该方法只是模仿鼠标点击,但GUI在测试执行时被冻结,因此无法工作……PerformClick同步吗?@beppe9000不知道;你得试试