private void RescForm_Load(object sender, EventArgs e)
        {
            Show();

            OpenFileDialog ofddbx = new OpenFileDialog();
            ofddbx.Filter = "*.dbx|*.dbx";
            ofddbx.DefaultExt = "dbx";
            if (ofddbx.ShowDialog(this) != DialogResult.OK) { Close(); return; }

            FolderBrowserDialog fbdRescExp = new FolderBrowserDialog();
            while (true) {
                fbdRescExp.Description = "救出したEMLファイルを保存するフォルダ?";
                if (fbdRescExp.ShowDialog(this) != DialogResult.OK) { Close(); return; }

                int n = Directory.GetFiles(fbdRescExp.SelectedPath).Length;
                if (n == 0) break;

                DialogResult dr = MessageBox.Show(this, String.Format("次のフォルダには {0:#,##0} 個のファイルが有ります。\n\n" + fbdRescExp.SelectedPath + "\n\n" + "他のファイルと混ざってしまう可能性が有ります。\n\n" + "本当に続行しますか。", n), null, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
                if (dr == DialogResult.Yes) break;
                if (dr != DialogResult.No) { Close(); return; }
            }

            String fpdbx = ofddbx.FileName;
            String dir = fbdRescExp.SelectedPath;

            bwResc.DoWork += delegate(object sender2, DoWorkEventArgs e2) {
                UtExplodeDbx.ExplodeDbx3(fpdbx,
                    delegate(UtExplodeDbx.Stat3 s3) {
                        Sync.Send(delegate {
                            if (bwResc.CancellationPending) throw new ApplicationException();
                            s3last = s3;
                            {
                                l1.Text = String.Format("{0:0}%", s3last.x);
                                l2.Text = String.Format("{0:0}% -- {1:#,##0}個", s3last.z, s3last.emailcnt);
                                pb1.Value = s3last.x;
                                pb2.Value = s3last.z;
                                s3last = null;
                            }
                        }, null);
                    },
                    delegate() {
                        for (int x = 0; ; x++) {
                            if (bwResc.CancellationPending) throw new ApplicationException();
                            String fp = Path.Combine(dir, String.Format("{0:000000}.eml", fno++));
                            if (!File.Exists(fp))
                                return File.Create(fp);
                        }
                    }
                    );
            };

            Sync = SynchronizationContext.Current;
            bwResc.RunWorkerAsync();
        }
 private void timer1_Tick(object sender, EventArgs e)
 {
     if (s3last != null) {
         l1.Text = String.Format("{0:0}%", s3last.x);
         l2.Text = String.Format("{0:0}% {1:#,##0}個", s3last.z, s3last.emailcnt);
         pb1.Value = s3last.x;
         pb2.Value = s3last.z;
         s3last = null;
     }
 }