123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- namespace CommonFroms.G2D
- {
- public partial class G2DProgressDialog : Form
- {
- private IProgress Progress;
- private Thread mThread;
- private bool mIsClose = false;
- private bool mIsFinish = false;
- private Exception mRunError;
- public G2DProgressDialog(IProgress progress)
- {
- InitializeComponent();
- this.Progress = progress;
- this.Text = Progress.Title;
- this.textBox1.Text = Progress.Text;
- this.progressBar1.Maximum = Progress.Maximum;
- this.progressBar1.Minimum = Progress.Minimum;
- this.progressBar1.Value = Progress.Value;
- progress.Begin();
- timer1.Start();
- mThread = new Thread(new ThreadStart(run));
- mThread.Start();
- }
- private void run()
- {
- try
- {
- Progress.Run();
- }
- catch (Exception err)
- {
- mRunError = err;
- }
- finally
- {
- mIsFinish = true;
- }
- }
- private void timer1_Tick(object sender, EventArgs e)
- {
- if (this.mIsClose)
- {
- timer1.Stop();
- this.Progress.Done();
- this.Close();
- }
- if (mRunError != null)
- {
- string msg = mRunError.Message + "\r\n" + mRunError.StackTrace;
- string cap = mRunError.Message;
- mRunError = null;
- MessageBox.Show(msg, cap);
- this.mIsClose = true;
- }
- if (Progress.IsDone || mIsFinish)
- {
- this.Refresh();
- this.mIsClose = true;
- this.progressBar1.Invalidate();
- }
- {
- int value = Progress.Value;
- value = Math.Min(value, Progress.Maximum);
- value = Math.Max(value, Progress.Minimum);
- this.progressBar1.Maximum = Progress.Maximum;
- this.progressBar1.Minimum = Progress.Minimum;
- this.progressBar1.Value = value;
- this.textBox1.Text = Progress.Text;
- }
- }
- private void G2DProgressDialog_FormClosing(object sender, FormClosingEventArgs e)
- {
- mThread.Join();
- }
- private void btnClose_Click(object sender, EventArgs e)
- {
- this.Close();
- }
- }
- public abstract class IProgress
- {
- public virtual string Title { get; protected set; }
- public virtual string Text { get; protected set; }
- public virtual bool IsDone { get; protected set; }
- public virtual int Maximum { get; protected set; }
- public virtual int Minimum { get; protected set; }
- public virtual int Value { get; protected set; }
- public IProgress()
- {
- this.Title = "";
- this.Text = "";
- this.IsDone = false;
- this.Maximum = 1;
- this.Minimum = 0;
- this.Value = 0;
- }
- public abstract void Run();
- public virtual void Done() { }
- public virtual void Begin() { }
- }
- }
|