当我的邮件发送时,我的弹出菜单没有出现
本文关键字:我的 菜单 | 更新日期: 2023-09-27 18:19:20
我用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'从创建它的线程以外的线程访问
初始化timer
并将其间隔设置为100ms
注册timer.tick
事件,查看该事件中的taskbarNotifier3
状态。如果状态为hidden
,则close
为form
.
你可以像这样检查State:
TaskbarNotifier.TaskbarStates state = taskbarNotifier1.TaskbarState;
if (state == TaskbarNotifier.TaskbarStates.hidden)
this.Close();
显示弹出窗口后启动定时器:
taskbarNotifier3.Show("Email Successfully Sent!!!", "GOOB BYE!!!.", 500, 3000, 500);
timer1.Start();
显然TaskbarNotifier
是Form
的子控件,关闭表单后会关闭。到目前为止没有什么奇怪的。正如Shaharyar建议的那样,ShowDialog
应该做到这一点。但从你的代码,它不知道什么样的控制taskbarnotifier是,如果它暴露了一个方法像ShowDialog()
。
你可以做的是创建一个简单的。net框架,包括MessageBox和显示它(默认情况下,它是显示模式->将阻止其他UI线程处理,直到用户关闭MessageBox点击Ok或其他)
查看下面的示例,了解正确的操作方法。
处理TaskbarNotifier
的close click事件,并将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();
}