C# 委托和线程-哪个线程管理调用的方法?
我对学员来说比较陌生,但仍然觉得他们有些困惑。我想要实现它们的方式需要调用从一个线程到另一个线程的委托。哪个线程将执行该方法?我将在这里编写一些示例代码:C# 委托和线程-哪个线程管理调用的方法?,c#,multithreading,delegates,C#,Multithreading,Delegates,我对学员来说比较陌生,但仍然觉得他们有些困惑。我想要实现它们的方式需要调用从一个线程到另一个线程的委托。哪个线程将执行该方法?我将在这里编写一些示例代码: public delegate void MyDel(); public class main() { Object MyLock = new Object(); public volatile int NumRegistered =
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类的情况下编写多线程回调“registry”,因为我已经可以使用backgroundworker完成这项工作了,我想了解它。如何让一个线程通知另一个线程它需要做某事?这样,您的两个新线程将永远不会执行
MethodA
或MethodB
因为它们从未调用委托。他们定义了将要执行的方法,他们从来没有实际执行该委托。主线程是唯一真正尝试调用委托的线程,因此它在主线程中运行