Avatar billede KOH Novice
04. februar 2015 - 11:00 Der er 1 løsning

Hook up events + reflection

Følgende kode starter tClass x antal gange via reflection, men hvordan får jeg forbundet events fra classen, i dette test tilfælde her skal tClass udføre et job og kalde et event når job er udført.

public class Program
{
    static void Main(string[] args)
        {
            var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

            for (int i = 0; i <= 2; i++ )
            {
                Console.WriteLine("tClass initialize {0}", i);

                Type _classType = typeof(tClass);

                var _classInstance = (object)Activator.CreateInstance(_classType);


                MethodInfo mInfo = _classType.GetMethod("start");
                mInfo.Invoke(_classInstance, null);
            }


            Console.WriteLine();
            Console.ReadLine();
        }

        public void tClass_completed(Guid guid)
        {
            Console.WriteLine("tClass {0} completed", guid);
        }
    }

    public class tClass
    {
        public delegate void tClass_completed(Guid guid);
        public event tClass_completed event_tClassCompleted;

        private Guid guid;

        public tClass()
        {
            guid = Guid.NewGuid();
            Console.WriteLine("tClass loaded {0}", guid);

         
        }

        public void start()
        {
            int _totalRuns = 5;

            for (int i = 0; i <= _totalRuns; i++)
            {
                Console.WriteLine("tClass working hard {0}/{1}", i, _totalRuns);
                System.Threading.Thread.Sleep(100);
            }

            if (event_tClassCompleted != null) event_tClassCompleted(guid);
        }
Avatar billede KOH Novice
04. februar 2015 - 11:18 #1
Sådan, det virker event bliver kaldt

EventInfo eventinfo = _classInstance.GetType().GetEvent("event_task_completed");
                Type delegateType = eventinfo.EventHandlerType;
                MethodInfo methodInfo = typeof(Program).GetMethod("tClass_completed");
                Delegate del = Delegate.CreateDelegate(delegateType,null, methodInfo);
                eventinfo.AddEventHandler(_classInstance, del);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester