1: class Program
2:     {
3:         static void Main(string[] args)
4:         {
5:
6:             string inputText = GetUserChoice();
7:
8:             while (!"4".Equals(inputText))
9:             {
10:                 ThreadTester tester = GreateThreadTesterByInputText(inputText);
11:                 tester.Start();
12:
13:                 while (true)
14:                 {
15:                     Console.WriteLine(GetStatusOfThreadTester(tester));
16:                     if (!tester.IsTesterRunning())
17:                     {
18:                         break;
19:                     }
20:                     Thread.Sleep(100);
21:                 }
22:
23:                 inputText = GetUserChoice();
24:             }
25:
26:             Console.Write("Click enter to exit...");
27:         }
28:
29:         private static string GetStatusOfThreadTester(ThreadTester tester)
30:         {
31:             return string.Format("[???{0}ms] counter = {1}?? {2}"??
32:                     tester.GetElapsedMillisecondsOfIncreaseCounter()?? tester.GetCounter()??
33:                     tester.IsTesterRunning() ? "running" : "stopped");
34:         }
35:
36:         private static ThreadTester GreateThreadTesterByInputText(string inputText)
37:         {
38:             switch (inputText)
39:             {
40:                 case "1":
41:                     return new SingleThreadTester();
42:                 case "2":
43:                     return new TwoThreadSwitchTester();
44:                 default:
45:                     return new MultiThreadTester(100);
46:             }
47:         }
48:
49:         private static string GetUserChoice()
50:         {
51:             Console.WriteLine(@"==Please select the option in the following list:==
52: 1. SingleThreadTester
53: 2. TwoThreadSwitchTester
54: 3. MultiThreadTester
55: 4. Exit");
56:
57:             string inputText = Console.ReadLine();
58:
59:             return inputText;
60:         }
61:     }