public static DualTextWriter StreamToDiagnostics()
        {
            var dual = new DualTextWriter();

            dual.Channel1 = Console.Out;

            Console.SetOut(dual);

            dual.Disposing =
                delegate
            {
                Console.SetOut(dual.Channel1);
            };

            return(dual);
        }
        public static DualTextWriter StreamToDiagnostics()
        {
            var dual = new DualTextWriter();

            dual.Channel1 = Console.Out;

            Console.SetOut(dual);

            dual.Disposing =
                delegate
                {
                    Console.SetOut(dual.Channel1);
                };

            return dual;
        }
        /// <summary>
        /// during using this instance the console output will be mirrored to a file
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static DualTextWriter StreamToFile(System.IO.FileInfo file)
        {
            var dual = new DualTextWriter();

            dual.Channel1 = Console.Out;
            dual.Channel2 = new System.IO.StreamWriter(file.OpenWrite());

            Console.SetOut(dual);

            dual.Disposing =
                delegate
            {
                dual.Channel2.Close();

                Console.SetOut(dual.Channel1);
            };

            return(dual);
        }
        /// <summary>
        /// during using this instance the console output will be mirrored to a file
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static DualTextWriter StreamToFile(System.IO.FileInfo file)
        {
            var dual = new DualTextWriter();

            dual.Channel1 = Console.Out;
            dual.Channel2 = new System.IO.StreamWriter(file.OpenWrite());

            Console.SetOut(dual);

            dual.Disposing =
                delegate
                {
                    dual.Channel2.Close();

                    Console.SetOut(dual.Channel1);
                };

            return dual;
        }