委托和线程 - 哪个线程管理调用的方法?

时间:2014-05-21 17:52:01

标签: c# multithreading delegates

我对代表来说相对较新,但仍然觉得有点令人困惑。我想要实现它们的方式需要从一个线程调用委托到另一个线程。哪个线程会执行该方法?我在这里写一些示例代码:

    public delegate void MyDel();       

    public class main()
    {   

        Object MyLock = new Object();               
        public volatile int NumRegistered = 0;
        public volatile MyDel Invoker = new MyDel;


        public main()

        {
            Thread t1 = new Thread(new ThreadStart(ThreadA));
            Thread t2 = new Thread(new ThreadStart(ThreadB));

            t1.Start();
            t2.Start();

            while(true)
            {
                if(int == 2)
                {
                    Invoker();
                    int = 1;
                }
            }
        }

        public void ThreadA()
        {
            MyFirstThread tA = new MyFirstThread(this);             
        }

        public void ThreadB()
        {
            MySecondThread tB = new MySecondThread(this);
        }

        public class MyFirstThread
        {           
            public MyFirstThread(main MyParent)
            {
                lock(MyParent.MyLock)
                {
                    MyParent.Invoker += new MyDel(MethodA);
                    MyParent.NumRegistered++;
                }

                while(true)
                {
                    //do something
                }                   
            }

            public void MethodA()
            {
                //This Method A - What thread will run it?  The "Main" thread or "t1"?
            }
        }

        public class MySecondThread
        {

            public MySecondThread(main MyParent)
            {
                lock(MyParent.MyLock)
                {
                    MyParent.Invoker += new MyDel(MethodB);
                    MyParent.NumRegistered++;
                }

                while(true)
                {
                    //do something
                }               
            }

            public void MethodB()
            {
                //This Method B - what thread will run it?  The "Main" thread or "t2"?
            }               
        }
    }

基本上我只是想学习编写多线程回调"注册表"没有使用backgroundworker类,因为我已经可以使用backgroundworker并且我想了解它。如何让一个线程通知另一个线程它需要做什么?

1 个答案:

答案 0 :(得分:1)

所以你的两个新线程永远不会最终执行MethodAMethodB beucase他们从不调用委托。他们正在定义将要执行的方法,他们从未真正执行该委托。主线程是实际尝试调用委托的唯一线程,因此它在主线程中运行。