首页新闻找找看学习计划

关于Abort线程时会报出“正在中止线程”的异常

0
悬赏园豆:30 [待解决问题]

有什么办法解决这个异常吗? 最近做个项目发送短信中遇到这个异常。
现在暂时没法发图
代码如下:

private void send()
{
try
{
//SendSMSBase(this.user, this.pwd, this.mobile, this.msg);
WebClient webc = new WebClient();
string datastr = "userid=" + this.user_id + "&username=" + this.user_name + "&passwordMd5=" + this.pwd + "&mobile=" + this.mobile + "&message=" + System.Web.HttpUtility.UrlEncode(this.msg, System.Text.Encoding.GetEncoding("gbk"));
//webc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//byte[] res_by = webc.UploadData("http://139.129.107.160:8081/sendsms.php", "POST", System.Text.Encoding.UTF8.GetBytes(datastr));
//string res_str = System.Text.Encoding.UTF8.GetString(res_by);
//if (res_str.Contains("-"))
//{
// logger.Error("发送手机短消息接口返回错误!" + res_str);
//}
}

        catch (Exception ex)
        {
            logger.Error("发送手机短消息失败!" + ex.Message);
        }

        finally
        {
            try
            {
                if (t1.IsAlive)
                {
                    t1.Abort();
                }
            }
            catch (ThreadAbortException ex)
            {

            }
            catch (Exception eeee)
            {
                logger.Error("异常:" + eeee.Message);
                //throw eeee;
            }
        }
    }

public void SendMesPhone(string mobileGet, string msgGet)
{
// this.user = 100015002;
this.user_id = "100531";
this.user_name = "enetedu02";
//this.pwd = "!^v30&t1";
this.pwd = "55aa4312da4ed697";
this.mobile = mobileGet;
this.msg = msgGet;

        //ThreadPool.QueueUserWorkItem(new WaitCallback(send), null);
        t1 = new Thread(new ThreadStart(send));
        t1.Start();
       
    }
实力快递员的主页 实力快递员 | 初学一级 | 园豆:128
提问于:2019-05-08 13:24

建议提供相关代码

dudu 6个月前

@dudu: 博客没有开通 暂时没法上传图片

实力快递员 6个月前

@实力快递员: 博问支持 markdown 高亮语法

dudu 6个月前

@dudu: 我重新贴出代码了 可以看下嘛

实力快递员 6个月前

@实力快递员: 博问支持 github 的 markdown 语法

dudu 6个月前

@实力快递员: 您用的是 .NET Framework 还是 .NET Core ?

dudu 6个月前

@dudu: .NET Framework

实力快递员 6个月前
< >
分享
所有回答(3)
0

在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。 调用此方法通常会终止线程。
本意就是用抛出异常来终止线程, 可以try-catch下

Thread.Abort方法应谨慎使用。 尤其是当您调用它来中止当前线程以外的线程,您不知道哪些代码已执行或失败时要执行ThreadAbortException引发,也不能为特定的应用程序的状态或任何应用程序和用户的状态负责保留。 例如,调用Thread.Abort可能会阻止执行静态构造函数或阻止非托管资源的释放。
请注意,Thread.Abort在.NET Core 上不支持方法。

大志若愚 | 园豆:967 (小虾三级) | 2019-05-08 13:48

msdn上面的示例就不会引发异常了吗?

支持(0) 反对(0) 实力快递员 | 园豆:128 (初学一级) | 2019-05-08 14:15
0

建议使用 HostingEnvironment.QueueBackgroundWorkItem

dudu | 园豆:41311 (高人七级) | 2019-05-08 14:37

这个还真没用过呢

支持(0) 反对(0) 实力快递员 | 园豆:128 (初学一级) | 2019-05-08 14:39
0

不要用abort终止线程,可以设置个变量来判断是否跳出线程
执行到 finally后这个线程自己就结束了,不需要你在去判断手动abort
线程里的代码执行结束后这个线程也就结束了,除非有while等循环的语句卡在那作为等待操作或者阻塞类型的方法会一直等待

jqw2009 | 园豆:1886 (小虾三级) | 2019-05-09 12:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册