C#的委託與多執行緒測試
阿新 • • 發佈:2021-01-13
C#的委託機制可以將一個新執行緒中的函式傳送到窗體建立的執行緒中執行,使用委託之後,呼叫的函式會在窗體所線上程中當前執行的函式結束後執行。測試如下
為了計時,先建立一個計時類TicToc,程式碼如下
using System; namespace Utility { public static class TicToc { static private long timeStart; public static void Tic() { timeStart = DateTime.Now.ToUniversalTime().Ticks; } // toc 呼叫一次1ms public static double Toc(string text) { double timeSpan = (double)((DateTime.Now.ToUniversalTime().Ticks - timeStart)) / 10000; if (text != "") Console.WriteLine(text + "---" + "time elapsed: " + timeSpan.ToString() + " ms"); else Console.WriteLine("time elapsed: " + timeSpan.ToString() + " ms"); return timeSpan; } public static double Toc() { return Toc(""); } } }
在主視窗中加入測試程式碼
delegate void AAA();
private void Aaa()
{
Invoke(new AAA(Bbb));
//Bbb();
}
private void Bbb()
{
Thread.Sleep(5000);
TicToc.Toc("bbb");
}
在任意一個控制元件的事件響應程式碼中加入下段
new Thread(Aaa).Start(); TicToc.Tic(); TicToc.Tic(); TicToc.Toc("aaa"); Thread.Sleep(2000); TicToc.Toc("ccc");
在Aaa()中通過委託呼叫Bbb的話,則打印出ccc時過去7000ms,在Aaa中直接呼叫Bbb的話,則打印出ccc時過去5000ms