/// <summary>
/// 递增方法
/// </summary>
public static void doAdd()
{
//string threadID = "threadID:doAdd:" + Guid.NewGuid() + ":" + Thread.CurrentThread.ManagedThreadId.ToString(); //Console.WriteLine(threadID); int i = 0; Thread thread = new Thread(delegate (object param)
{ // 等待“停止”信号,如果没有收到信号则执行 while (!canStop)
{
Console.WriteLine(i++);
Thread.Sleep(1000);
} // 此时已经收到停止信号,可以在此释放资源并
canStop = false; }); thread.Start();//启动线程 }
点击按钮调用此方法,再点击时需关闭之前点击时启动的线程,如何实现
/// 递增方法
/// </summary>
public static void doAdd()
{
//string threadID = "threadID:doAdd:" + Guid.NewGuid() + ":" + Thread.CurrentThread.ManagedThreadId.ToString(); //Console.WriteLine(threadID); int i = 0; Thread thread = new Thread(delegate (object param)
{ // 等待“停止”信号,如果没有收到信号则执行 while (!canStop)
{
Console.WriteLine(i++);
Thread.Sleep(1000);
} // 此时已经收到停止信号,可以在此释放资源并
canStop = false; }); thread.Start();//启动线程 }
点击按钮调用此方法,再点击时需关闭之前点击时启动的线程,如何实现
然儿结果却是这样,不知道是那里写的不对还是怎么的
调用的地方是这么写的 DelegateThread delegateThread = new DelegateThread(DelegateThread.doAdd);
Thread th = new Thread(new ThreadStart(delegateThread.DoSomeThing));
th.IsBackground = true;
th.Start();
public static void doAdd()
{
//string threadID = "threadID:doAdd:" + Guid.NewGuid() + ":" + Thread.CurrentThread.ManagedThreadId.ToString(); //Console.WriteLine(threadID); int i = 0;
if(!startTR){
Thread thread = new Thread(delegate (object param)
{ // 等待“停止”信号,如果没有收到信号则执行 while (true)
{
if(startTR)
break;
Console.WriteLine(i++);
Thread.Sleep(1000);
} }); thread.Start();//启动线程
} }
public static void 结束线程(){
canStop=true;
}
public static void doAdd()
{
//string threadID = "threadID:doAdd:" + Guid.NewGuid() + ":" + Thread.CurrentThread.ManagedThreadId.ToString(); //Console.WriteLine(threadID); int i = 0;
if(!canStop){
Thread thread = new Thread(delegate (object param)
{ // 等待“停止”信号,如果没有收到信号则执行 while (true)
{
if(canStop)
break;
Console.WriteLine(i++);
Thread.Sleep(1000);
} }); thread.Start();//启动线程
} }
public static void 结束线程(){
canStop=true;
}
这个结束线程方法在哪里用呢
主要是
canStop=true;
而不是这个方法。
你想在那控制线程结束,那就在那指定这个赋值。
改变 canStop 为 true 之后,你需要等待/监听你的原来执行的线程把它重新改为 false 之后,才能开始启动你的新的线程。所以 canStop 首先必须是一个方法——属性,而不是一个简单字段。其次它应该触发事件。例如static event Action canStopChanged;
static bool _canStop = false;static bool canStop
{
get { return _canStop; }
set
{
if (value != _canStop)
{
_canStop = value;
if (canStopChanged != null)
canStopChanged();
}
}这样,你才能够监听canStop改变事件,例如static void test()
{
canStopChanged += () => test2();
canStop = true;
}static void test2()
{
if (!canStop)
{
//canStop已经重新设置为 false了,因此可以启动新任务了
}
}