1. 程式人生 > >監聽執行緒的執行結果繼續執行

監聽執行緒的執行結果繼續執行

 背景:有兩臺電腦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);

}

}