static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; var parameters = InputParameters.Parse(args); using (var finishHandle = new ManualResetEvent(false)) { var factory = CompressionModeFactory.Create(parameters); var reader = factory.CreateReader(); var writer = factory.CreateWriter(finishHandle); reader.Run(); writer.Run(); using (var compressor = factory.CreateCompressionWorker()) { compressor.Run(); } finishHandle.WaitOne(); } Console.WriteLine("Completed. Push any key for exit"); Console.ReadKey(); }