首页 新闻 会员 周边 捐助

C#、Winform 如何让一个线程暂停指定时间后继续工作?

0
悬赏园豆:100 [已解决问题] 解决于 2010-07-27 09:51

(C#、Winform)

我有这样一个需求:一个线程,窗体上接收到某快捷键后Start,执行A方法(void Method(inta,int b))之后暂停一秒或数秒,紧接着再执行B方法(B方法与A方法结构一样)后暂停数秒,线程结束。

求简单的小例子,代码稍微注释下。

在下不胜受恩感激。

问题补充: 有两点是我搞不定的,请针对这两个点详细作答: ①:由于我是多线程,我要将指定的线程暂停指定秒数。 ②:交给线程执行的方法(void Method(int a,int b))需要传参,这个代码怎么写? 由于我也是临时需要用多线程,所以面对各种线程对象的传参、接收返回值、挂起、继续等弄得摸不着头脑 各位帮帮忙,最好能花几分钟帮我写个小例子。
LyZane的主页 LyZane | 初学一级 | 园豆:35
提问于:2010-07-27 00:08
< >
分享
最佳答案
1

Thread类有几个至关重要的方法:
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数;
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;
Resume():恢复被Suspend()方法挂起的线程的执行。

收获园豆:70
Astar | 高人七级 |园豆:40805 | 2010-07-27 08:09
我也知道Thread可以Sleep,但是这个Sleep是暂停的哪个线程呢?我这里有多个new Thread。
LyZane | 园豆:35 (初学一级) | 2010-07-27 09:03
@奔放的胸毛。:Thread类你需要实例化的吧,它是静态方法,暂停运行到那里的当前线程。
Astar | 园豆:40805 (高人七级) | 2010-07-27 09:23
@Astar:关于传参和返回值,可以参考:http://www.cnblogs.com/xxaxx/archive/2009/12/20/1628236.html 多线程的一些总结,参考:http://kb.cnblogs.com/page/68545/
Astar | 园豆:40805 (高人七级) | 2010-07-27 09:30
@Astar:暂停运行到那里的当前线程。这句话解决了第一点,第二点我看看你给的参考先。
LyZane | 园豆:35 (初学一级) | 2010-07-27 09:44
其他回答(4)
0

线程暂停只要调用

System.Threading.Thread.Sleep 方法就可以了,很简单。

收获园豆:5
eaglet | 园豆:17139 (专家六级) | 2010-07-27 07:36
我也知道Thread可以Sleep,但是这个Sleep是暂停的哪个线程呢?我这里有多个new Thread。
支持(0) 反对(0) LyZane | 园豆:35 (初学一级) | 2010-07-27 09:03
0

我是来鼓掌的,都是正解

dege301 | 园豆:2825 (老鸟四级) | 2010-07-27 08:34
0

带参数的有几种写法,你可以试一下别的

代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ThreadDemo
{
class Program
{
static void Main(string[] args)
{
       //实例化类,为线程提供参数

Demo d1
=new Demo(1,4);
Demo d2
=new Demo(11,15);

Thread th1
= new Thread(new ThreadStart(d1.start));
Thread th2
= new Thread(new ThreadStart(d2.start));

th1.Start();
Thread.Sleep(
1000);
th2.Start();
}

}

class Demo
{
private int a;
private int b;
public Demo(int aa, int bb)
{
this.a = aa;
this.b = bb;
}

public void start()
{
for (int i = a; i < b; i++)
{
Console.WriteLine(i.ToString());
}

}

}
}
收获园豆:25
xihongshibeibei | 园豆:386 (菜鸟二级) | 2010-07-27 09:10
谢谢你的代码,不过使用Thread.Sleep()来暂停线程的话主线程也被暂停了,出现界面停止响应的情况,所以我要暂停某一个线程。再想想办法。
支持(0) 反对(0) LyZane | 园豆:35 (初学一级) | 2010-07-27 09:15
确定你当前线程,然后使用
支持(0) 反对(0) 代码苦行僧 | 园豆:311 (菜鸟二级) | 2010-07-30 08:05
0

Thread.Sleep()    前面的这个Thread要是你建立的一个线程对象,如果用系统的Sleep()静态方法调用就是主线程休息了,界面当然会卡

硕硕 | 园豆:212 (菜鸟二级) | 2011-12-02 17:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册