using System; using System.Threading; namespace MultiConsole.Test { internal static class Program { private static void Main(string[] args) { //TestGetFromCurrentProcess(); //TestCreateNewConsone(); TestMultiConsole(); } private static void TestMultiConsole() { Console.Title = "Multi console host"; var rnd = new Random(); var threads = new Thread[5]; for (var i = 0; i < threads.Length; i++) { var localVarIndex = i; threads[localVarIndex] = new Thread(() => { try { Console.WriteLine("Creating Console {0}...", localVarIndex); var con = ConsoleFactory.Create(string.Format("Sub Console {0}", localVarIndex)); Console.WriteLine("Sub Console {0} Created.", localVarIndex); con.ForegroundColor = (ConsoleColor)rnd.Next(7,16); con.BackgroundColor = (ConsoleColor) rnd.Next(0, 7); int l1, l2; con.SetCursorPosition(l1 = rnd.Next(0,5), rnd.Next(0,5)); Console.WriteLine("Sub Console {0} say hello...", localVarIndex); do { con.SetCursorPosition(l2 = rnd.Next(0,5), rnd.Next(0,5)); } while (l1 == l2); con.WriteLine("Hello!"); Console.WriteLine("Sub Console {0} said hello.", localVarIndex); Console.WriteLine("Sub Console {0} waiting input...", localVarIndex); con.SetCursorPosition(rnd.Next(0, 10), rnd.Next(0, 10)); con.Write("Input something:"); var input = con.ReadLine(); Console.WriteLine("Sub Console {0} got input: {1}", localVarIndex, input); Console.WriteLine("Sub Console {0} shutting down...", localVarIndex); ConsoleFactory.CloseConsole(con); Console.WriteLine("Sub Console {0} Finished.", localVarIndex); } catch (Exception ex) { Console.WriteLine("Sub Console {0} Dropped -- {1}", localVarIndex, ex); } }) { Name = string.Format("Sub Console {0} Thread", i), }; } foreach (var thread in threads) { thread.Start(); } foreach (var thread in threads) { thread.Join(); } Console.WriteLine(); Console.Write("Finished. press ENTER to exit."); Console.ReadLine(); } private static void TestCreateNewConsone() { // ReSharper disable once InconsistentNaming var Console = ConsoleFactory.Create("The new console"); Console.Write("OK, type some input,and ENTER:"); var x = Console.ReadLine(); Console.WriteLine("echo your input:{0}", x); Console.Write("Finished."); ConsoleFactory.CloseConsole(Console); } private static void TestGetFromCurrentProcess() { // ReSharper disable once InconsistentNaming var Console = ConsoleFactory.GetFromCurrentProcess(); Console.Title = "GetFromCurrentProcess"; Console.Write("OK, type some input,and ENTER:"); var x = Console.ReadLine(); Console.WriteLine("echo your input:{0}", x); Console.Write("Finished."); ConsoleFactory.CloseConsole(Console); } } }