static void DoComplexWork(int workUnits, int unitTimeMs, string header = null)
        {
            var cwc = new ConsoleWriteContext(true, header);

            for (int x = 0; x <= workUnits; x++)
            {
                cwc.WriteContinue("." + x);
                Thread.Sleep(unitTimeMs);
            }

            cwc.WriteContinue(" - Second Section - ");
            for (int x = 0; x <= 10; x++)
            {
                cwc.WriteAtCurrent(x.ToString());
                Thread.Sleep(unitTimeMs);
            }

            cwc.WriteStart("Section complete - line overwritten with this status");

            cwc.WriteNewLine("Starting 3rd section...");
            for (int x = 0; x <= 20; x++)
            {
                cwc.WriteWorkingAnimation();
                Thread.Sleep(unitTimeMs);
            }
            cwc.WriteContinue(" Complete!");
        }
        static void DoPercentageWork(int unitTimeMs, string header = null)
        {
            var cwc = new ConsoleWriteContext(true, header);

            for (int x = 0; x <= 100; x++)
            {
                cwc.WritePercentage(x, true, true);
                Thread.Sleep(unitTimeMs);
            }

            cwc.WriteContinue(" Complete!");
        }
        static void DoSimpleWork(int workUnits, int unitTimeMs, string header = null)
        {
            var cwc = new ConsoleWriteContext(true, header);

            for (int x = 0; x <= workUnits; x++)
            {
                cwc.WriteContinue("." + x);
                Thread.Sleep(unitTimeMs);
            }

            cwc.WriteContinue(" Complete!");
        }
        static void DoWorkElapsedTime(int workUnits, int unitTimeMs, string header = null)
        {
            var cwc1 = new ConsoleWriteContext(true, header + "a");
            var cwc2 = new ConsoleWriteContext(true, header + "b");

            for (int x = 0; x <= workUnits; x++)
            {
                cwc1.WriteElapsedTime(ElapsedTimeUnit.Ms, true);
                cwc2.WriteElapsedTime(ElapsedTimeUnit.Second, true);
                Thread.Sleep(unitTimeMs);
            }

            cwc1.WriteContinue(" Complete!");
            cwc2.WriteContinue(" Complete!");
        }
        static void DoWorkMultiCastOutput(int workUnits, int unitTimeMs, string header = null)
        {
            // example of having multiple console outputs from 1 Task/Thread
            var cwc1 = new ConsoleWriteContext(true, header + "a");
            var cwc2 = new ConsoleWriteContext(true, header + "b");
            var cwc3 = new ConsoleWriteContext(true, header + "c");

            for (int x = 0; x <= workUnits; x++)
            {
                cwc1.WriteContinue(".");
                cwc2.WriteContinue("_" + x.ToString());
                cwc3.WriteAtCurrent(cwc3.GetNextWorkingAnimChar() + " " + x.ToString());
                Thread.Sleep(unitTimeMs);
            }

            cwc1.WriteContinue(" Complete!");
            cwc2.WriteContinue(" Complete!");
        }