【问题标题】:When should we use event in C#我们什么时候应该在 C# 中使用事件
【发布时间】:2013-04-22 04:52:28
【问题描述】:

我是 C# 和 WPF 的新手。我刚刚学习了 C# 中的异步编程。 我们提出事件和一些我们捕捉到这个事件的地方。

这种方法的好处是我们不需要直接调用对象方法。示例我们从数据库加载数据,然后在加载数据方法完成后,它会引发事件LoadDataSuccessfully 然后主类捕获该事件并引发事件UpdateGUIAfterLoadDataSuccessfully,其他一些控件将捕获此事件并更新GUI。

但现在我想可能是......我在我的项目中使用它太多了,可能是我过度使用它太多了。 请给我一些建议,什么时候应该使用 Event,什么时候应该使用传统方式。

【问题讨论】:

  • 我不认为你真的可以过度使用一种方法,如果它服务于它的目的。事件和异步服务于您在有可用数据时采取行动的目的,这非常有效。
  • 不太可能回答...但请发表评论:尝试用其他机制替换事件,看看您是否更喜欢其他版本,这样您可以决定哪个更好(对于 你的项目中的案例)。
  • 事件不是异步的。它们也很常见,我想它们几乎存在于任何 OOP 语言中,所以我也不会称它们为非传统语言。至于何时使用它们——我认为这是你从经验中学到的东西。听从阿列克谢的建议。
  • 你为什么不试试“命令”msdn.microsoft.com/en-IN/library/ms752308.aspx

标签: c# wpf event-handling conceptual


【解决方案1】:

当发起动作的代码不适合直接了解对该动作作出反应的代码时,应使用事件。

让我们通过例子来解释

问题

在您的系统中,您有数据对象发送给您,说您每分钟从外部系统发送 50 个数据对象。收到此数据后,您需要让另一个对象对其进行处理。

在这种情况下使用事件或简单的方法调用会更好吗?

回答

一方面,一个事件在这里听起来很合适,因为处理数据接收的代码不应该依赖于对所述数据执行某些操作的代码的实现。否则,数据接收代码现在负责两件事 - 接收数据委派处理数据。

另一方面,如果数据的特定处理与外部调用者发送数据的行为直接相关,则将其设为函数调用可能更有意义

看看this

【讨论】:

    【解决方案2】:

    这里是你上面写的几个 cmets/answers

    “这种方法的好处是我们不需要直接调用对象方法。” – 是的,但这并不意味着您应该为所有事情都事件并完全避免显式方法调用。 Kyle 提供的示例是一个很好的示例。另外——看看在 .NET 中默认情况下是如何使用事件的——它们只使用 if 来异步事件(鼠标单击、鼠标悬停等)

    “示例我们从数据库加载数据,然后在加载数据方法完成后,它会引发事件 LoadDataSuccessfully 然后主类捕获此事件并引发事件 UpdateGUIAfterLoadDataSuccessfully,其他一些控件将捕获此事件并更新 GUI。” – 如果需要不时刷新数据但我什至不确定,我只会使用这种方法。不使用事件以您在此处描述的方式加载数据是很常见的。请注意,您所写的内容意味着您有一个线程用于加载数据,另一个线程用于 GUI……

    “我在我的项目中使用它太多了,可能是我过度使用它太多了。” - 你可能是正确的。

    【讨论】:

      【解决方案3】:

      简而言之,“事件”用于让其他对象决定应在事件触发器上执行哪些操作或代码,但我建议开始使用“命令”以获取更多信息http://msdn.microsoft.com/en-IN/library/ms752308.aspx

      【讨论】:

        猜你喜欢
        • 2021-09-07
        • 1970-01-01
        • 2010-12-30
        • 2014-11-09
        • 1970-01-01
        • 2011-07-04
        • 2017-09-13
        • 2021-12-29
        相关资源
        最近更新 更多