我有以下代码,我处理一个事件两次。但我总是想确保mynewclass
始终首先处理事件,然后触发本地事件处理程序代码。我知道 MyClass 事件应该首先触发,因为这是第一个创建的事件,但由于线程和排队正在发生,我认为它花费了太长时间并且它在做一些事情myhandleeventlocal
在我希望它这样做之前。我有什么办法可以等待它发生吗?
public MyMainClass
{
private MyMethod()
{
MyClass mynewclass = new MyClass();
mynewclass.myObject += MyHandler(myhandleventlocal);
mynewclass.loadedevent += EventHandler(loadedevent)
}
private void myhandleventlocal()
{
//do stuff
}
private void loadedevent()
{
//do some stuff
}
}
public MyClass
{
public MyObject myObject;
public event loadedevent;
public MyClass()
{
myObject = new MyObject();
myObject += MyHandler(myhandlevent);
}
private void myhandlevent(long value, string detail)
{
//Start a thread
//Enqueue value and detail
//On seperate thread dequeue value and process it
//Raise loadedevent event
}
}
更新:我已经更新了我的问题和代码来演示该问题。
By default事件处理程序按照您添加事件处理程序的顺序进行调用,因此,如果您始终按照您希望事件处理程序触发的顺序添加处理程序,那么它应该可以工作。
摘自 Jon Skeet 的文章活动和代表 http://csharpindepth.com/Articles/Chapter2/Events.aspx:
[...] 额外的代表都会添加到列表末尾或从列表末尾删除 [...]
注意:您可以通过更改事件来覆盖事件的默认行为add
and remove
对您的事件进行操作以指定一些其他行为。然后,您可以将事件处理程序保存在您自己管理的列表中,并根据您喜欢的任何规则处理触发顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)