Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 停止背景线程_C#_Asp.net_Multithreading - Fatal编程技术网

C# 停止背景线程

C# 停止背景线程,c#,asp.net,multithreading,C#,Asp.net,Multithreading,此代码一次成功发送一封电子邮件。 我的问题是在单击按钮2时停止电子邮件。单击按钮2时,计时器成功显示消息,确认会话[“停止”]等于(“真”)。 然而,电子邮件并没有停止。。有什么帮助吗 protected void Button2_Click(object sender, EventArgs e) { Session["stop"] = "true"; } private void email() { for (int i = 1; i <= amount; i++)

此代码一次成功发送一封电子邮件。 我的问题是在单击
按钮2
时停止电子邮件。单击
按钮2
时,计时器成功显示消息,确认
会话[“停止”]等于(“真”)
。 然而,电子邮件并没有停止。。有什么帮助吗

protected void Button2_Click(object sender, EventArgs e)
{
    Session["stop"] = "true";
}

private void email()
{
    for (int i = 1; i <= amount; i++)
    {
        Thread email = new Thread(delegate ()
        {
            SendMail(to, from, password, subject, body, amount);
        });
        email.IsBackground = true;
        email.Start();
        if (Session["stop"].Equals("true"))
        {
            email.Abort();
            return;
        }
    }
}

protected void Timer1_Tick(object sender, EventArgs e)
{
    if (Session["stop"].Equals("true"))
    {
        Label1.Text = "Mail stopped. Sent: " + allMailSent;
        Session["stop"] = "false";
    }
}
protectedvoid按钮2\u单击(对象发送者,事件参数e)
{
会话[“停止”]=“真”;
}
私人电邮()
{

对于(int i=1;i)您使用
线程
而不是
任务
,有什么原因吗?至于取消,请使用
取消令牌
。如果
会话[“停止”]。等于(“true”)
真的
,那么最好的逻辑就是不首先启动线程。在这里,你要启动它,然后立即检查你是否真的是认真的,然后试图杀死它。嗯,我还郑重建议不要在会话中保留控制线程状态的东西。@colim我创建了一个发送命令不回发的l按钮。这为我提供了每封电子邮件的实时计数器sent@spender我觉得会话是每发送一封电子邮件都有一个实时计数器的唯一方式