private static void Main(string[] args)
        {
            ArgumentParser argp = new ArgumentParser();
            var a = argp.Parse(args);
            string username = a.GetValue("u", "user", "username");
            string password = a.GetValue("p", "pwd", "pass", "password");
            string school = a.GetValue("s", "school");
            string year = a.GetValue("y", "year");

            if (string.IsNullOrWhiteSpace(username))
                username = Program.Prompt("username");
            if (string.IsNullOrWhiteSpace(username))
                return;

            if (string.IsNullOrWhiteSpace(password))
                password = Program.Prompt("password");
            if (string.IsNullOrWhiteSpace(password))
                return;

            int schoolNumber = 0;
            if (string.IsNullOrWhiteSpace(school))
                school = Program.Prompt("school");
            if (string.IsNullOrWhiteSpace(school) || !int.TryParse(school, out schoolNumber))
                return;

            int yearNumber = 0;
            if (string.IsNullOrWhiteSpace(year))
                year = Program.Prompt("year");
            if (string.IsNullOrWhiteSpace(year) || !int.TryParse(year, out yearNumber))
                return;

            try
            {
                Console.Clear();
                Console.WriteLine("Downloading...");
                YearbookClient yb = new YearbookClient(username, password);
                yb.DownloadRoot = Environment.CurrentDirectory;
                int downloadCount = 0;
                yb.ImageDownloaded += (sender, e) =>
                {
                    downloadCount = e.ImageNumber;
                    Console.Clear();
                    Console.WriteLine($"Downloaded {downloadCount} images...");
                };
                string dir = yb.DownloadYearbook(schoolNumber, yearNumber).Result;
                Console.Clear();
                Console.WriteLine($"Complete. Downloaded {downloadCount} images to '{dir}'.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            if (Debugger.IsAttached)
            {
                Console.WriteLine();
                Console.WriteLine("Press [Enter] to exit.");
                Console.ReadLine();
            }
        }
        private async Task DownloadAsync(object o)
        {
            var vm = Validate();
            if (vm.Any())
            {
                MessageBox.Show(string.Join(Environment.NewLine, vm), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            YearbookClient yb = new YearbookClient(Username, Password);
            this.Status = "Downloading ...";
            yb.ImageDownloaded += (sender, e) => this.Status = $"Downloaded {e.ImageNumber} ...";
            await yb.DownloadYearbook(School, Year);
            this.Status = "Download Complete";
        }