2013-04-22 99 views
1

我是C#和WPF的新手。我刚刚在C#中学习了异步编程。 我们举办活动和一些我们赶上这个事件。我们应该什么时候在C#中使用事件

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

但现在我想可能是......我在项目中使用它太多,可能是我过度使用它太多。 请给我一些建议,当我们应该使用事件,当我们应该做传统的方式。

+4

我不认为你真的可以过度使用一种方法,如果它服务于它的目的。事件和异步服务的目的是当您有可用的数据时采取行动,这非常有效。 – ericosg 2013-04-22 04:56:52

+3

并不是真的可以回答...但是对于评论:尝试用其他机制来替换事件,并且看看你是否更喜欢其他版本,这样你可以决定什么更好(对于* your *项目中的* your *情况) 。 – 2013-04-22 04:58:55

+1

事件不是异步的。他们也是相当普遍的,我猜他们几乎都有任何OOP语言,所以我也不会称他们为非传统语言。至于何时使用它们 - 我认为这是你从经验中学到的东西。只要按照阿列克谢的建议。 – 2013-04-22 05:42:22

回答

3

如果不适合源自操作的代码直接了解对该操作作出响应的代码,则应使用事件。

让用例的帮助说明

问题

在你的系统,你必须你说你有每分钟50个数据对象发送从外部接收system.Upon这一点,你的数据对象发送需要由另一个对象进行处理。

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

回答

一方面,事件听起来合适的位置,因为它处理数据接收的代码不应该依赖于它做了与上述数据代码的执行。否则,数据接收代码现在负责两件事 - 接收数据委托其处理。

在另一方面,如果数据的具体处理是直接关系到采取行动的是由外部主叫用户发送,可能更有意义,使它成为一个函数调用

看看this

2

这里有几个评论/回答你上面写的

“这种方法的优点是我们不需要直接调用对象方法。” - 真实,但这并不意味着你应该事件的一切,并避免显式方法调用。 Kyle提供的例子是一个很好的例子。另外 - 看看默认情况下.NET中如何使用事件 - 它们只用于异步事件(鼠标点击,鼠标悬停等)

“示例我们从数据库加载数据,然后在加载数据方法完成后,它引发事件LoadDataSuccessfully然后主类捕获这个事件并引发事件UpdateGUIAfterLoadDataSuccessfully,其他一些控件将捕获这个事件并更新GUI。“ - 如果数据需要不时刷新,我只会用这种方法,但甚至不知道这一点。使用事件来加载数据是很常见的,不会像你在这里描述的那样。请注意,你写的意味着你有一个线程用于加载数据,另一个用于GUI ...

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

相关问题