1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
// fenetre classique contenant une progressbar
// en cas de fermeture préalable, le traitement sera arrétée
// ele se ferme auto quand le traitement est fini
public partial class FormWait : Form
{
BackgroundWorker bgw;
public FormWait(DoWorkEventHandler MyAsyncMethod)
{
InitializeComponent();
bgw = new BackgroundWorker();
bgw.WorkerReportsProgress = true;
bgw.WorkerSupportsCancellation = true;
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(EndOfWork);
bgw.ProgressChanged += new ProgressChangedEventHandler(ReportProgressOnProgressBar);
bgw.DoWork += MyAsyncMethod;
bgw.RunWorkerAsync();
}
private void EndOfWork(object sender, RunWorkerCompletedEventArgs evt)
{
this.Close();
}
private void ReportProgressOnProgressBar(object sender, ProgressChangedEventArgs evt)
{
this.pgbWait.Value = evt.ProgressPercentage;
}
private void OnClose(object sender, EventArgs evt)
{
bgw.CancelAsync();
this.Close();
}
}
class TaClasseDeTraitement
{
// cette méthode est l'argument à donner au constructeur de ta fenêtre d'attente
public void TonTraitement(object sender , DoWorkEventArgs evt)
{
BackgroundWorker b;
if (sender != null && sender.GetType() == typeof(BackgroundWorker))
b = sender as BackgroundWorker;
else //cette méthode peut être appelée depuis aillerus que ta fenêtre d'attente
b = new BackgroundWorker();
// traitement
b.ReportProgress(10);
// traitement à nouveau
b.ReportProgress(20);
// etc...
}
} |
Partager