監聽執行緒的執行結果繼續執行
背景:有兩臺電腦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);
}
}