我使用C#程序发送了一封smt邮件。我面临的问题是我的流行音乐不会到来。当我按下按钮。电子邮件正在正常发送,表单也正在关闭。
我希望首先发送电子邮件然后弹出以显示,然后应用程序需要关闭。但此时电子邮件发送完美,表格正在关闭。当我删除this.close()
弹出窗口即将发送并且电子邮件正在发送时,但形式为......: - (。
如何解决此问题。
我的代码
private void button7_Click(object sender, EventArgs e)
{
//System.Threading.Thread.Sleep(4000);
SmtpClient client = new SmtpClient("smtp.gmail.com", 25);
client.EnableSsl = true;
client.Timeout = 10000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("stacy1983@gmail.com", "sorrynopass");
MailMessage msg = new MailMessage();
msg.To.Add("jack.margret@gmail.com");
msg.From = new MailAddress("stacy1983@gmail.com");
msg.Subject = ("hello good");
msg.Body = ("congo");
client.Send(msg);
taskbarNotifier3.CloseClick+=new EventHandler(CloseClick);
taskbarNotifier3.Show("Email Successfully Sent!!!", "GOOB BYE!!!.", 500, 3000, 500);
this.Hide();
System.Timers.Timer aTimer = new System.Timers.Timer(3000);
aTimer.Elapsed += OnTimedEvent;
aTimer.Enabled = true;
}
private void CloseClick(object sender, EventArgs e)
{
this.Close();
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
this.Close();
}
//错误称为跨线程操作无效:控制' Form1'从创建它的线程以外的线程访问。
答案 0 :(得分:0)
初始化timer
并将其间隔设置为100毫秒。
注册timer.tick
个事件并检查该事件中的taskbarNotifier3
州。如果状态为hidden
,则close
为form
。
您可以像这样查看状态:
TaskbarNotifier.TaskbarStates state = taskbarNotifier1.TaskbarState;
if (state == TaskbarNotifier.TaskbarStates.hidden)
this.Close();
显示PopUp后启动计时器:
taskbarNotifier3.Show("Email Successfully Sent!!!", "GOOB BYE!!!.", 500, 3000, 500);
timer1.Start();
答案 1 :(得分:0)
显然TaskbarNotifier
是Form
的孩子,并会因关闭表单而关闭。到目前为止没什么奇怪的。正如Shaharyar建议ShowDialog
应该做的那样。但是从你的代码中不知道什么样的控制任务条形码是什么,以及它是否暴露了像ShowDialog()
这样的方法。
你可以做的是创建一个包含MessageBox的简单.NET Framework并显示它(默认情况下它显示为modal - >将阻止其他UI线程处理,直到用户通过单击Ok或其他东西关闭Messagebox。)
请参阅this example了解正确的方法。
答案 2 :(得分:0)
处理TaskbarNotifier
的关闭点击事件,并将this.Close()
置于该事件中。
{
client.Send(msg);
taskbarNotifier3.CloseClick+=new EventHandler(CloseClick);
taskbarNotifier3.Show("Email Successfully Sent!!!", "GOOB BYE!!!.", 500, 3000, 500);
this.Hide();
System.Windows.Forms.Timer aTimer = new System.Windows.Forms.Timer();
aTimer.Interval = 3000;
aTimer.Tick += OnTimedEvent;
aTimer.Enabled = true;
}
private void CloseClick(...)
{
this.Close();
}
private void OnTimedEvent(Object source, EventArgs e)
{
this.Close();
}