在多線程應用中我們有一些很常見的需求,比如定時去做計劃任務,或者是在執行一個長時間的任務 ,在執行這個任務的過程中能有進度顯示(能想到要實現這個需求需要新開一個線程,避免阻塞UI的更新 )。對於這些應用.NET提供了現成的組件。
首先來看一下System.Threading的Timer組件,它提供了定時執行某個任務的方法:
ThreadPool.SetMinThreads(2, 2);
ThreadPool.SetMaxThreads(4, 4);
Timer timer = new Timer((state) =>
{
int a, b;
ThreadPool.GetAvailableThreads(out a, out b);
Console.WriteLine(string.Format("({0}/{1}) #{2} : {3}", a, b, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("mm:ss")));
}, null, 2000, 1000);
Console.WriteLine(DateTime.Now.ToString("mm:ss"));
Thread.Sleep(5000);
Console.WriteLine("Change()");
timer.Change(3000, 500);
Thread.Sleep(5000);
Console.WriteLine("Dispose()");
timer.Dispose();
Thread.Sleep(5000);
Console.WriteLine(DateTime.Now.ToString("mm:ss"));
這段代碼的運行結果如下: