委托和线程——哪个线程管理被调用的方法

本文关键字:线程 调用 方法 管理 | 更新日期: 2023-09-27 18:04:40

我对委托比较陌生,仍然觉得它们有些令人困惑。我想实现它们的方式需要从一个线程调用一个委托到另一个线程。哪个线程将执行该方法?我将在这里编写一些示例代码:

    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,我想了解它。我如何让一个线程通知另一个线程,它需要做什么?

委托和线程——哪个线程管理被调用的方法

所以你的两个新线程将永远不会结束执行MethodAMethodB,因为他们从来没有调用委托。它们定义了什么功能会被执行,它们永远不会执行那个委托。主线程是唯一一个真正尝试调用委托的线程,所以它在主线程中运行。