Torna al Thread

public void Invia() { //Prima di avviare il nuovo thread, fa tutti i controlli if (textBox1.Text.Length == 0 && textBox2.Text.Length == 0) { MessageBox.Show("Please Fill The \"From\" and The \"To\" Field.", "Missing", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } if (textBox1.Text.Length == 0) { MessageBox.Show("Please Fill The \"From\" Field.", "Missing", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } if (textBox2.Text.Length == 0) { MessageBox.Show("Please Fill The \"To\" Field.", "Missing", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } //Imposta i valori progressBar1.Value = 0; progressBar1.Minimum = 0; progressBar1.Maximum = Convert.ToInt32(comboBox2.SelectedItem); this.Title = "UFO Mail - Sending..."; this.Cursor = Cursors.Wait; //Crea il Thread Thread thd = new Thread(new ParameterizedThreadStart(invio)); //Crea i parametri da passare al thread (per non avere eccezioni di cross-thread) object[] parameters = new object[] { comboBox2.SelectedItem, textBox1.Text, textBox2.Text, textBox3.Text, richTextBox1.Document.ToString(), comboBox1.SelectedItem }; //Avvia il thread separato thd.Start(parameters); } private void invio(object obj) { object[] param = (object[])obj; int nom = Convert.ToInt32(param[0]); //Questo delegato (metodo anonimo) incrementa il valore della progressbar Action<int> incVal = delegate(int n) { progressBar1.Value++; if (progressBar1.Value == n) { MessageBox.Show("message Sent!", "Sent", MessageBoxButton.OK, MessageBoxImage.Information); progressBar1.Value = 0; } }; for (int i = 0; i <= nom; i++) { try { MailMessage Msg = new MailMessage(); Msg.From = new MailAddress((string)param[1]); Msg.To.Add(new MailAddress((string)param[2])); Msg.Subject = (string)param[3]; Msg.Body = (string)param[4]; Msg.IsBodyHtml = true; SmtpClient Smtp = new SmtpClient((string)param[5]); Smtp.DeliveryMethod = SmtpDeliveryMethod.Network; NetworkCredential Credential = new NetworkCredential(); Smtp.UseDefaultCredentials = false; Smtp.Credentials = Credential; Smtp.Send(Msg); //Incrementa il valore della progressbar sul thread a cui appartiene progressBar1.Dispatcher.Invoke(incVal, nom); } catch (Exception ex) { MessageBox.Show("Houston, We Have a Problem!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); break; } } //Questo codice verrà eseguito sul thread a cui appartengono i controlli ThreadStart act = delegate() { this.Title = "UFO Mail"; this.Cursor = Cursors.Arrow; progressBar1.Value = 0; }; //Controlla se siamo sul thread dei controlli o su un altro if (this.Dispatcher.CheckAccess()) { //Se siamo su quello dei controlli, chiama il delegato normalmente act.Invoke(); } else { //Altrimenti invoca il delegato sul thread corretto this.Dispatcher.Invoke(act, null); } }
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5