【发布时间】:2014-11-22 09:06:13
【问题描述】:
如何在 C# 中使用 backgroundworker 发送电子邮件时显示进度条。当我们将任何内容复制到驱动器时,它应该逐步显示。我正在阅读 excel 文件以发送电子邮件。 progressbar1.performstep();
按钮的 OnClick 我正在显示进度条
private void button2_Click(object sender, EventArgs e)
{
progressBar1.Visible = true;
percentageLabel.Visible = true;
backgroundWorker1.RunWorkerAsync();
}
关于进度改变事件:怎么办??
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progresBar1.PerformStep();
}
在做工作 sendmail :(注意:我需要 backgroundWorker1.ReportProgress 应该逐步执行,问题在这里我知道但是怎么做和做什么?请在这里帮忙)
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
backgroundWorker1.ReportProgress(98);
while (!quit)
{
// Code to send email here
sendmail();
}
}
void sendmail()
{
string ConStr = "";
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\CreditControl\\CC\\outstanding.xlsx;Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
string query = "SELECT [Agent ID] FROM [Sheet1$] group by [Agent ID] ";
OleDbConnection conn = new OleDbConnection(ConStr);
OleDbCommand cmd = new OleDbCommand(query, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
System.Data.DataTable dt = new System.Data.DataTable();
da.Fill(dt);
conn.Close();
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["Agent ID"].ToString() != "")
{
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\CreditControl\\CC\\agent_mail_master.xlsx;Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
string query2 = "SELECT Mail1,Mail2,Mail3,Mail4,Mail5 FROM [Sheet1$] where [Agent ID] = '" + dt.Rows[i]["Agent ID"].ToString() + "'";
OleDbConnection conn2 = new OleDbConnection(ConStr);
if (conn2.State == ConnectionState.Closed)
{
conn2.Open();
}
OleDbCommand cmd1 = new OleDbCommand(query2, conn2);
OleDbDataAdapter sda = new OleDbDataAdapter(cmd1);
System.Data.DataTable dts = new System.Data.DataTable();
sda.Fill(dts);
conn2.Close();
if (dts.Rows.Count > 0)
{
try
{
SmtpClient SmtpServer = new SmtpClient();
MailMessage mail = new MailMessage();
SmtpServer.Credentials = new System.Net.NetworkCredential("");
SmtpServer.Port = 25;
SmtpServer.Host = "";
mail.From = new MailAddress("");
if (dts.Rows[0]["Mail1"].ToString() != "")
mail.To.Add(dts.Rows[0]["Mail1"].ToString());
if (dts.Rows[0]["Mail2"].ToString() != "")
mail.To.Add(dts.Rows[0]["Mail2"].ToString());
if (dts.Rows[0]["Mail3"].ToString() != "")
mail.To.Add(dts.Rows[0]["Mail3"].ToString());
if (dts.Rows[0]["Mail4"].ToString() != "")
mail.To.Add(dts.Rows[0]["Mail4"].ToString());
if (dts.Rows[0]["Mail5"].ToString() != "")
mail.To.Add(dts.Rows[0]["Mail5"].ToString());
mail.Subject = "";
mail.IsBodyHtml = true;
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Program Files\\CreditControl\\CC\\outstanding.xlsx;Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
string query3 = "Select [Date],[Agency Name] ,[Agent ID],[Delay Days],[OD Amount],[Receipt Amount],[Outstanding Amount],Remarks,[Entered By] FROM [Sheet1$] where [Agent ID] ='" + dt.Rows[i]["Agent ID"].ToString() + "'";
OleDbConnection conn3 = new OleDbConnection(ConStr);
OleDbCommand cmd2 = new OleDbCommand(query3, conn3);
OleDbDataAdapter oda = new OleDbDataAdapter(cmd2);
System.Data.DataTable dta = new System.Data.DataTable();
oda.Fill(dta);
conn3.Close();
StringBuilder sb = new StringBuilder();
mail.Body = sb.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
quit = true;
}
ON backgroundWorker_RunWorkerCompleted 成功消息:
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
progressBar1.Visible = false;
percentageLabel.Text = "";
MessageBox.Show("Error");
return;
}
else
{
MessageBox.Show("Processed successfully");
System.Windows.Forms.Application.Exit();
}
}
【问题讨论】:
标签: c# winforms c#-4.0 progress-bar c#-2.0