监听线程的执行结果继续执行

 背景:有两台电脑A,B

字段filed:A电脑中的状态字段(初始为false);

线程t1:运行在A电脑,时刻监听字段filed的状态,当filed为true的时候,然后进行操作再将filed设置为false;

url1:电脑B调用电脑A中的方法,改变field的状态(filed改变为true);

url2:电脑B调用电脑A中的方法,但是需要url1改变状态之后,线程t1执行完才能运行的方法(但是现实中是执行完url1的方法之后,t1线程还没走接着执行url2中的方法了,所以需要在url2调用的方法中添加一个线程进行时刻检测filed的状态然后进行操作)

添加线程的两种方式:

1.每隔100ms执行一次,最多执行三秒(三十次100ms)

Thread thread = new Thread(() => {
int n = 0;
while (n < 30)
{
  n++;
  if (!filed)
    {

    do something....

    break;

    }
  Thread.Sleep(100);
}
});
thread.Start();

2.

private static System.Timers.Timer aTimer;//全局变量

url2方法内

aTimer = new System.Timers.Timer(100);//100ms执行一次
DateTime dt = DateTime.Now;
TimeSpan ts1 = new TimeSpan(dt.Ticks);
aTimer.Elapsed += new ElapsedEventHandler((sender, e) => OnTimedEvent(sender, e, a, ts1.Subtract(new TimeSpan(DateTime.Now.Ticks)).Duration().Seconds));//OnTimedEvent绑定的方法,ts1.Subtract(new TimeSpan(DateTime.Now.Ticks)).Duration().Seconds计算aTimer执行了多少秒
aTimer.Interval = 2000;
aTimer.Enabled = true;

aTimer绑定的方法

private static void OnTimedEvent(object source, ElapsedEventArgs e, int a,int ta)
{

    if (ta>=3)
    {
      aTimer .Close();
      return;
    }

if (!filed)

{
  aTimer.Close();

  do something......
  Console.WriteLine("The Elapsed event was raised at {0},{1},{2}", e.SignalTime, +Thread.CurrentThread.ManagedThreadId,ta);

}

}

猜你喜欢

转载自www.cnblogs.com/houxiaobei/p/10101406.html