private void RequestListDirectory(FtpDirectory NewDir)
        {
            FcRequestDynamicPort PasvCmd = new FcRequestDynamicPort();

            Service.PushNewCommand(PasvCmd);

            FcListDirectory Cmd = new FcListDirectory(NewDir);

            Cmd.OnDirectoryListed += OnFtpDirectoryListed;
            Service.PushNewCommand(Cmd);
        }
        private void ButtonScanRecursive_Click(object sender, EventArgs e)
        {
            MarkInterfaceBusy(true);
            CommandsLeft = 0;

            ++CommandsLeft;
            Service.PushNewCommand(new FcRequestDynamicPort());
            RecursiveTree = new FtpDirectory();
            FcListDirectory Dir = new FcListDirectory(RecursiveTree);

            Dir.OnDirectoryListed += RecursiveOnDirectoryListed;
            Service.PushNewCommand(Dir);
        }
        private void RecursiveOnDirectoryListed(bool Success, FtpDirectory Directory)
        {
            --CommandsLeft;

            foreach (FtpDirectory Subdir in Directory.Subdirectories)
            {
                ++CommandsLeft;
                Service.PushNewCommand(new FcRequestDynamicPort());
                FcListDirectory Dir = new FcListDirectory(Subdir);
                Dir.OnDirectoryListed += RecursiveOnDirectoryListed;
                Service.PushNewCommand(Dir);
            }

            if (CommandsLeft == 0)
            {
                Invoke(new Action(() =>
                {
                    ListboxDirContents.Items.Clear();
                    CurrentDir = RecursiveTree;
                    RecursivePrintDirectory(RecursiveTree);
                }));
            }
        }