我对代表来说相对较新,但仍然觉得有点令人困惑。我想要实现它们的方式需要从一个线程调用委托到另一个线程。哪个线程会执行该方法?我在这里写一些示例代码:
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并且我想了解它。如何让一个线程通知另一个线程它需要做什么?
答案 0 :(得分:1)
所以你的两个新线程永远不会最终执行MethodA
或MethodB
beucase他们从不调用委托。他们正在定义将要执行的方法,他们从未真正执行该委托。主线程是实际尝试调用委托的唯一线程,因此它在主线程中运行。