当我的邮件发送时,我的弹出菜单没有出现

本文关键字:我的 菜单 | 更新日期: 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,则closeform .

你可以像这样检查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();

显然TaskbarNotifierForm的子控件,关闭表单后会关闭。到目前为止没有什么奇怪的。正如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();
}