c#语言窗体运行暂停指令,C#线程启动、暂停、恢复、停止怎么实现

这篇博客介绍了如何在C#中实现线程的控制,包括启动、暂停、恢复和停止功能。通过示例代码展示了使用ManualResetEvent和AutoResetEvent实现线程的暂停和恢复,以及通过设置布尔变量控制线程停止的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论坛的高手你们好,本人是一个菜鸟,肯请大家帮个忙实现如下功能:

首先窗体界面如下:

767b1bae07451131ad504e7518f13757.png

怎么实现“start”启动线程、“pause”暂停线程、“resume”恢复线程,“stop”停止线程,

直观现象是,按start启动计数,在右边输出,点pause,会暂停输出,然后点resume能够继续输出,点stop则停止输出(这时候再点resume没反应,只能点start开始重新输出)

下图是暂停,但是本人没法儿恢复继续输出

4e3844186eb0841f833e7d5b39e2838c.png

在此,小弟先行谢过了!

解决方案

30

aaa3904d602c13e33eac1819bfde22f7.png

namespace Test

{

public partial class Form4 : Form

{

public Form4()

{

InitializeComponent();

Label.CheckForIllegalCrossThreadCalls = false;

}

Thread thread;

ManualResetEvent ma;

bool on_off = false;

bool stop = false;

private void button1_Click(object sender, EventArgs e)

{

thread = new Thread(Runtime);

thread.Start();

}

void Runtime()

{

for (int i = 1; i <= 100; i++)

{

if (stop)

return;

if (on_off)

{

ma = new ManualResetEvent(false);

ma.WaitOne();

}

textBox1.AppendText("计时 :" + i + "\r\n");

Thread.Sleep(100);

}

}

private void button2_Click(object sender, EventArgs e)

{

on_off = true;

textBox1.AppendText("暂停中 :\r\n");

}

private void button3_Click(object sender, EventArgs e)

{

on_off = false;

ma.Set();

textBox1.AppendText("继续计时 :\r\n");

}

private void button4_Click(object sender, EventArgs e)

{

stop = true;

textBox1.AppendText("停止计时 \r\n");

}

}

}

10

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Threading;

using System.Windows.Forms;

namespace 线程挂起测试

{

public partial class Form1 : Form

{

static AutoResetEvent myResetEvent = new AutoResetEvent(false);

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Control.CheckForIllegalCrossThreadCalls = false;

}

private void button1_Click(object sender, EventArgs e)

{

多线程();

PT();

}

private void button2_Click(object sender, EventArgs e)

{

PD = false;

}

private void button3_Click(object sender, EventArgs e)

{

PD = true;

PT();

}

private void 多线程()//创建线程执行 计时

{

ThreadStart entry = new ThreadStart(计时);

Thread workThread = new Thread(entry);

workThread.IsBackground = true;

workThread.Start();

//a = workThread.GetHashCode();

}

private void 计时()

{

textBox1.Text = “逐个计数到100为止\r\n”;

for (int i = 0; i 

{

textBox1.Text += “逐秒计时” + i + “\r\n”;

Thread.Sleep(1000);

myResetEvent.WaitOne();

}

}

private bool PD =  true; //false

private void 判断能否执行()

{

while (PD)

{

myResetEvent.Set();

}

}

private void PT()//创建后台线程执行 判断能否执行

{

ThreadStart entry = new ThreadStart(判断能否执行);

Thread workThread = new Thread(entry);

workThread.IsBackground = true;

workThread.Start();

}

}

}

退出线程没写  留给你本人写了   本人倒是想写直接退出程序

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#线程启动、暂停、恢复、停止怎么实现!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值