优先处理事件处理程序

Jon*_*Jon 2 .net c# event-handling .net-3.5 c#-3.0

我有以下代码,我处理一个事件两次.但是我总是希望确保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

         }

    }
Run Code Online (Sandbox Code Playgroud)

更新:我已更新我的问题和代码以证明问题.

Mar*_*ers 6

通过默认的事件处理程序调用你加他们,所以如果你总是在你想他们会火,那么它应该工作的顺序添加处理程序的顺序.

来自Jon Skeet关于活动和代表的文章:

[...]额外的代表被添加到列表末尾并从中删除[...]

注意:您可以通过更改事件的addremove操作来覆盖事件的默认行为,以指定其他一些行为.然后,您可以将事件处理程序保存在您自己管理的列表中,并根据您喜欢的规则处理触发顺序.

  • 虽然乔恩是对的,但规范没有规定解雇顺序.虽然我不希望MS改变游戏计划,但如果一个应用程序真的依赖于知道解雇顺序,我们通过实现事件的`add`和`remove`元素来控制执行. (5认同)