我的邮件发送时,我的弹出菜单不会出现

时间:2014-08-23 07:44:17

标签: c# winforms popupwindow

我使用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'从创建它的线程以外的线程访问。

3 个答案:

答案 0 :(得分:0)

初始化timer并将其间隔设置为100毫秒。

注册timer.tick个事件并检查该事件中的taskbarNotifier3州。如果状态为hidden,则closeform

您可以像这样查看状态:

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)

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