陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2167,comments - 570,views - 412万
在使用.Net Framework的时候,我们一般用Thread.Start()来开始一个线程,用Thread.Abort()来强制结束这个线程,然而当项目整体迁移到.Net Core的时候,发现程序进行到Thread.Abort()的时候突然崩掉了。

        原因是Thread.Abort 已被弃用。那么结束一个线程的替代方法是什么呢。当尝试采用Thread.Interrupt()后,线程并没有按预期的情况结束,反而是随着线程的不断开启而越来越来以至于卡线程了。

        按照官方的解决方式是使用 CancellationToken 来中止工作单位的处理,而不是呼叫 Thread.Abort。 下列范例示范如何使用 CancellationToken。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void ProcessPendingWorkItemsNew(CancellationToken cancellationToken)
 
{
 
if (QueryIsMoreWorkPending())
 
{
 
// If the CancellationToken is marked as "needs to cancel",
 
// this will throw the appropriate exception.
 
cancellationToken.ThrowIfCancellationRequested();
 
 
 
WorkItem work = DequeueWorkItem();
 
ProcessWorkItem(work);
 
}
 
}

 



​        然而本人觉得这个方法略显麻烦,何不从根本的线程运行逻辑上来中断线程,大家知道所有线程不外乎一个循环,我只要能够控制这个循环结束不就行了吗。

        处理方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
private bool isThreadStart = false; //增加一个线程控制开关
 
private Thread thread;
 
//线程启动方法
 
void ThreadStart()
 
{
 
thread = new Thread(ThreadRun); //初始化一个ThreadRun的线程
 
isThreadStart = true; //控制线程开始
 
thread.Start();
 
}
 
//线程停止方法
 
void ThreadStop()
 
{
 
isThreadStart = false; //控制线程结束
 
thread = null;
 
}
 
//线程运行方法
 
void ThreadRun()
 
{
 
while(true)
 
{
 
if(!isThreadStart)
 
{
 
break; //强制退出循环
 
}
 
//线程开始处理
 
}
 
}

 





 

posted on   宏宇  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2020-10-14 IIS服务器多站点多域名同时部署多个不同SSL证书HTTPS实现方法
2019-10-14 windows server 2016 安装网卡驱动
2014-10-14 BIOS简单设置 解析“集成显卡”内存占用问题
2011-10-14 win7无法ping通原因
2006-10-14 解析 XML
2006-10-14 脚本(js)控制页面输入
2006-10-14 Javascript小技巧(6)
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示