C# 如何等待方法启动&;完成了?

C# 如何等待方法启动&;完成了?,c#,multithreading,asynchronous,C#,Multithreading,Asynchronous,我有一个在线程#1上运行的方法A 我还有在线程2上运行的方法B 方法A向共享对象写入函数C(接收对象值并返回布尔值的方法),该函数应通过方法B在某个事件上执行。(方法B是一个永远运行的TCP侦听器方法) 我希望方法A将等待该事件发生并且C完成。目前它是通过基于睡眠的for循环实现的(带有超时等) 让我更清楚一点,流程是这样的: 方法B(在线程#2上):while(true){处理数据,如果数据有x,那么someFunc(..)} 方法A(在线程#1上):someFunc=(obj)=>{…}等待

我有一个在线程#1上运行的方法A

我还有在线程2上运行的方法B

方法A向共享对象写入函数C(接收对象值并返回布尔值的方法),该函数应通过方法B在某个事件上执行。(方法B是一个永远运行的TCP侦听器方法)

我希望方法A将等待该事件发生并且C完成。目前它是通过基于睡眠的for循环实现的(带有超时等)

让我更清楚一点,流程是这样的:

方法B(在线程#2上):
while(true){处理数据,如果数据有x,那么someFunc(..)}

方法A(在线程#1上):
someFunc=(obj)=>{…}
等待B执行someFunc&完成
多做点事


实现这一点最明智的方法是什么?

使用
AutoResetEvent
ManualResetEvent

private AutoResetEvent signal = new AutoResetEvent(false);
void MethodB()
{
   //process data
   if(condition)
   {
       signal.Set();//Say you're finished
   }
}

void MethodA()
{
    //Do something

    signal.WaitOne();//Wait for the signal
    //Here do whatever you want. We received signal from MethodB
}

我建议阅读使用
AutoResetEvent
ManualResetEvent

private AutoResetEvent signal = new AutoResetEvent(false);
void MethodB()
{
   //process data
   if(condition)
   {
       signal.Set();//Say you're finished
   }
}

void MethodA()
{
    //Do something

    signal.WaitOne();//Wait for the signal
    //Here do whatever you want. We received signal from MethodB
}

我建议阅读

使用锁和监视器类

private object _lock = new object();
...
private void StartTaskAndWait()
{
   lock (_lock)
   {
      new Task(DoSomething).Start();
      Monitor.Wait()
   }
}
在任务结束时使用Pulse方法“唤醒”等待的线程

lock (_lock)
{
   Monitor.Pulse(_lock);
}

使用锁和监视器类

private object _lock = new object();
...
private void StartTaskAndWait()
{
   lock (_lock)
   {
      new Task(DoSomething).Start();
      Monitor.Wait()
   }
}
在任务结束时使用Pulse方法“唤醒”等待的线程

lock (_lock)
{
   Monitor.Pulse(_lock);
}
看看它是为这类事情制作的,MSDN上也有一些例子。a怎么样?你可以在下面的网站上找到答案。它是为这类事情制作的,MSDN上也有一些例子。a怎么样?你可以在