委托和线程——哪个线程管理被调用的方法
本文关键字:线程 调用 方法 管理 | 更新日期: 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,我想了解它。我如何让一个线程通知另一个线程,它需要做什么?
所以你的两个新线程将永远不会结束执行MethodA
或MethodB
,因为他们从来没有调用委托。它们定义了什么功能会被执行,它们永远不会执行那个委托。主线程是唯一一个真正尝试调用委托的线程,所以它在主线程中运行。