/// <summary>
/// 线程启停控制
/// </summary>
private CancellationTokenSource cts;
然后在启动线程按钮的事件里 , 编写代码如下:
private void btn_Start_Click(object sender EventArgs e)
{
cts = new CancellationTokenSource();
Task.Run(() =>
{
TaskMethod();
cts.Token);
停止线程按钮的事件里 , 只需要调用cts的Cancel方法即可:
private void btn_Stop_Click(object sender EventArgs e)
{
cts.Cancel();
CurrentValue = 0;
其实 , 说白了 , 就是通过cts来控制cts的IsCancellationRequested属性 , 进而实现多线程的控制 。
线程的暂停继续多线程的暂停继续 , .NET为我们提供了另外一个对象——ManualResetEvent , 这个对象会有一个值 , 这个值是布尔类型 , 就像一个门闸一样 , True是打开门闸 , False是关闭门闸 , 所以想要暂停多线程就调用这个对象的Reset方法 , 想要继续多线程就调用这个对象的Set方法 , 使用非常简单 。
首先我们创建一下这个对象 , 可以通过构造方法 , 给这个对象赋初始值 , 我这里为True , 这样就能直接运行 , 不会阻塞 。
/// <summary>
/// 线程暂停控制默认开启
/// </summary>
private ManualResetEvent manual = new ManualResetEvent(true);
但是如果希望这个对象与多线程有所联系 , 必须要在多线程的方法里体现这个对象的作用 , 这个是调用这个对象的WaitOne方法 , 表示在调用的地方阻塞住 , 通过判断True或者False来决定是否继续执行 , 就像大家开车过高速收费站一样 , 即使现在普遍采用ETC了 , 在入口也需要减速 , 有一个ETC识别的过程 , 识别成功才会抬杆 , 识别识别 , 杆子是不会自动抬起的 , 这个是一样的道理 。
所以线程执行代码如下:
/// <summary>
/// 多线程执行方法
/// </summary>
private void TaskMethod()
{
while (!cts.IsCancellationRequested)
{
manual.WaitOne();
CurrentValue++;
if (CurrentValue == 200)
- 索尼|索尼电视就是最好的吗?
- 三星|没有人会在意你用的是索尼A9二代还是一代,靠作品说话
- 6月23日晚|九连发!索尼一大波电视新品发布:最高卖79999元
- |天玑9000有了新体验,索尼IMX800+30倍变焦,荣耀Magic4不香了
- 索尼|从4999元跌至3299元,8GB+256GB旗舰,不要利润了
- 去年|索尼万元HT-A9音箱被指频繁断连
- playstation5|索尼你学会了吗?油管大神魔改PS5:体积大幅缩小,散热还更好
- 一加科技|从3299降到1999元,索尼IMX766+三星E4屏,高端机跌成千元机
- MacBook Air|索尼使出杀手锏:环绕式无界屏+5600mAh,索尼大法好
- |索尼新品X95EK对比中国本土产品TCL X11,哪一款更吃香?
