C# 如何等待方法启动&;完成了?
我有一个在线程#1上运行的方法A 我还有在线程2上运行的方法B 方法A向共享对象写入函数C(接收对象值并返回布尔值的方法),该函数应通过方法B在某个事件上执行。(方法B是一个永远运行的TCP侦听器方法) 我希望方法A将等待该事件发生并且C完成。目前它是通过基于睡眠的for循环实现的(带有超时等) 让我更清楚一点,流程是这样的: 方法B(在线程#2上):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)=>{…}等待
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怎么样?你可以在