关于C#中的线程重启的问题
首先不管是C#也好,还是java也好,对于已经Abort的线程是无法再次Start的,除非是声明私有变量new一个新的线程,网上也有很多人说可以Suspend挂起线程,然后再Resume继续,但是相信聪明的你们早就发现了,微软官方已经将这两个方法设为过时了,不推荐这么用,现在本人就分享一个本人觉得还算比较好用的方法:
private List<Thread> _threadList = new List<Thread>(); //记录产生的线程,可声明为全局公共变量
public Form1()
{
InitializeComponent();
}
private void DoWork()
{
for (int i = ; i < ; i++)
{
if (i == )
{
Thread t = new Thread(() =>
{
while (true)
{
BeginInvoke(new Action(() =>
{
label1.Text =
DateTime.Now.ToString(
"yyyy-MM-dd HH:mm:ss");
}));
Thread.Sleep();
}
});
_threadList.Add(t);
t.Start();
}
else if (i == )
{
Thread t = new Thread(() =>
{
while (true)
{
BeginInvoke(new Action(() =>
{
label2.Text =
DateTime.Now.AddDays().ToString(
"yyyy-MM-dd HH:mm:ss");
}));
Thread.Sleep();
}
});
_threadList.Add(t);
t.Start();
}
else if (i ==)
{
Thread t = new Thread(() =>
{
while (true)
{
BeginInvoke(new Action(() =>
{
label3.Text =
DateTime.Now.AddMonths().ToString(
"yyyy-MM-dd HH:mm:ss");
}));
Thread.Sleep();
}
});
_threadList.Add(t);
t.Start();
}
else if (i == )
{
Thread t = new Thread(() =>
{
while (true)
{
BeginInvoke(new Action(() =>
{
label4.Text =
DateTime.Now.AddYears().ToString(
"yyyy-MM-dd HH:mm:ss");
}));
Thread.Sleep();
}
});
_threadList.Add(t);
t.Start();
}
}
}
private void BtnStartClick(object sender, EventArgs e)
{
Thread _threadMain = new Thread(DoWork);
_threadMain.IsBackground = true;
_threadList.Add(_threadMain);
_threadMain.Start();
}
private void BtnStopClick(object sender, EventArgs e)
{
foreach (var t in _threadList)
{
t.Abort();
}
_threadList.Clear();
}
以上的代码很简单,界面上两个按钮,4个Lable分别显示4个时间,点击开始按钮,开启4个线程,并把4个线程对象加到List集合中,点击结束按钮,将List中的4个线程对象全都Abort,并将List清空,如果想要重启的效果,则可以先调用Stop,然后再调Start即可,是不是很简单吖
关于C#中的线程重启的问题的更多相关文章
- 详解Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
在Spring Cloud中我们用Hystrix来实现断路器,Zuul中默认是用信号量(Hystrix默认是线程)来进行隔离的,我们可以通过配置使用线程方式隔离. 在使用线程隔离的时候,有个问题是必须 ...
- android中的线程池学习笔记
阅读书籍: Android开发艺术探索 Android开发进阶从小工到专家 对线程池原理的简单理解: 创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理 ...
- php 5.4中php-fpm 的重启、终止操作命令
php 5.4中php-fpm 的重启.终止操作命令: 查看php运行目录命令:which php/usr/bin/php 查看php-fpm进程数:ps aux | grep -c php-fpm ...
- rxjava源码中的线程知识
rxjava源码中的线程知识 rx的最精简的总结就是:异步 这里说一下以下的五个类 1.Future2.ConcurrentLinkedQueue3.volatile关键字4.AtomicRefere ...
- C#中的线程(一)入门
文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari, 翻译 Swanky Wu 中文翻译作者把原文放在了& ...
- C#中的线程四(System.Threading.Thread)
C#中的线程四(System.Threading.Thread) 1.最简单的多线程调用 System.Threading.Thread类构造方法接受一个ThreadStart委托,改委托不带参数,无 ...
- C#中的线程三 (结合ProgressBar学习Control.BeginInvoke)
C#中的线程三(结合ProgressBar学习Control.BeginInvoke) 本篇继上篇转载的关于Control.BeginInvoke的论述之后,再结合一个实例来说明Cotrol.Begi ...
- C#中的线程二(Cotrol.BeginInvoke和Control.Invoke)
C#中的线程二(Cotrol.BeginInvoke和Control.Invoke) 原文地址:http://www.cnblogs.com/whssunboy/archive/2007/06/07/ ...
- C#中的线程一(委托中的异步)
C#中的线程一(委托中的异步) 一.同步委托 我们平时所用的委托以同步居多,我们编写一个方法和相关委托进行演示: publicdelegatevoid DoSomethingDelegate(stri ...
随机推荐
- Rational.Rose.Enterprise.v7.0 (2007)安装分享
很多人都在找rational软件,很多都是2003的,有的宣称是2007,但结果还是2003.也许真的不存在Rational.Rose 2007,不过有IBM.Rational.Rose.Enterp ...
- 前端模板Juicer
Juicer 是一个高效.轻量的前端 (Javascript) 模板引擎,使用 Juicer 可以是你的代码实现数据和视图模型的分离(MVC). 除此之外,它还可以在 Node.js 环境中运行. 用 ...
- iOS和Android测试区别
1. Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2. 多分辨率测试,Android端20多种,ios较少: 3. 手机操作系统,Andro ...
- Postman-CI集成Jenkins
Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins Newman 官方说明:Postman's command-line companion lets you ...
- FMDB浅析
一.FMDB介绍 FMDB是一种第三方的开源库,FMDB就是对SQLite的API进行了封装,加上了面向对象的思想,让我们不必使用繁琐的C语言API函数,比起直接操作SQLite更加方便. FMDB优 ...
- GetRelevantAnimTimeRemainingFraction节点Bug
初始设置: 动画状态机: MoveStop->Idle的条件: 使用该节点的目的: 在动画蓝图的过渡条件中使用该节点,保证上一个状态的动作完成后进入下一个动作.需求是MoveStop动作完成后才 ...
- 安装 webpack
安装 webpack看好webpack 对自动压缩和文件名自动md5更名,可解决客户端缓存问题.我的安装环境为 centos linux,root用户 1.安装Node及NPM.到NodeJS官网安装 ...
- 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...
- 【腾讯Bugly干货分享】iOS10 SiriKit QQ适配详解
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ece0331288fb4d31137da6 1. 概述 苹果在iOS10开放 ...
- Unsafe与CAS
Unsafe 简单讲一下这个类.Java无法直接访问底层操作系统,而是通过本地(native)方法来访问.不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作 ...