代码:
运行结果:
http://hi.csdn.net/attachment/201110/12/10173500_1318394222qFR5.jpg那个辅助线程不是包含在主线程里吗?为什么不等辅助线程结束,主线程就结束了呢???
运行结果:
http://hi.csdn.net/attachment/201110/12/10173500_1318394222qFR5.jpg那个辅助线程不是包含在主线程里吗?为什么不等辅助线程结束,主线程就结束了呢???
解决方案 »
- [求助] 页面跳转aspxerrorpath错误
- 我想输出Console里的内容 ,该怎么写
- 想到到脑筋锈钭的treeview更新问题!!
- 一个变量在page_load()中数据库读出来的备注字段,如何显示在单元格?
- 在C#中,RichTextBox的行高怎么设置?
- GridView中如何将一项编辑状态为多个DropDownList,并且怎么更新
- C# pictureBox中使用滚动条
- 我们公司搞的垂直性搜索引擎!由于公司倒闭所以提供给大家了(完成度95%)
- 高手帮忙(BHO插件开发问题)
- 非泛型的ArrayList存储string,是否会涉及拆箱和装箱
- 这个类中在定义变量及构造的时候使用了 static有什么作用,帮忙解答,谢谢
- C#编程如何实现这个功能DELPHI读取CPU功能
ManualResetEvent eventWait = new ManualResetEvent(false)
public class EventWaitTest
{
private string name; //顾客姓名
//private static AutoResetEvent eventWait = new AutoResetEvent(false);
private static ManualResetEvent eventWait = new ManualResetEvent(false);
private static ManualResetEvent eventOver = new ManualResetEvent(false); public EventWaitTest(string name)
{
this.name = name;
} public static void Product()
{
Console.WriteLine("服务员:厨师在做菜呢,两位稍等");
Thread.Sleep(2000);
Console.WriteLine("服务员:宫爆鸡丁好了");
eventWait.Set();
while (true)
{
if (eventOver.WaitOne(1000, false))
{
Console.WriteLine("服务员:两位请买单");
eventOver.Reset();
}
}
} public void Consume()
{
while (true)
{
if (eventWait.WaitOne(1000, false))
{
Console.WriteLine(this.name + ":开始吃宫爆鸡丁");
Thread.Sleep(2000);
Console.WriteLine(this.name + ":宫爆鸡丁吃光了");
eventWait.Reset();
eventOver.Set();
break;
}
else
{
Console.WriteLine(this.name + ":等着上菜无聊先玩会手机游戏");
}
}
}
} public class App
{
public static void Main(string[] args)
{
EventWaitTest zhangsan = new EventWaitTest("张三");
EventWaitTest lisi = new EventWaitTest("李四"); Thread t1 = new Thread(new ThreadStart(zhangsan.Consume));
Thread t2 = new Thread(new ThreadStart(lisi.Consume));
Thread t3 = new Thread(new ThreadStart(EventWaitTest.Product)); t1.Start();
t2.Start();
t3.Start(); Console.Read();
}
}
http://www.cnblogs.com/freshman0216/archive/2008/07/30/1252345.html
父线程在第5秒造了子线程,然后 子线程也开始工作(他不造子线程),他要做某件事用时150秒当父线程工作完毕的时候 子线程还在工作
但是你的父线程工作完后,就结束了,你看到的就是 子线程的结果还没显示,你的可爱的神秘的黑色小窗口就关闭了....你想要得到结果 那么就让父线程工作完后等上一段时间 Thread.Sleep(N秒钟);这N秒时间内要让子线程完成..那么你就会看见子线程的结果了
你可以做一个WINFROM应用程序测试一下如果你的主线程休眠,你看看你还能做什么操作么?
这样你就能稍微理解UI线程到底是干什么的了,
你子线程开启了,主线程执行,子线程也在执行,主线程执行完毕,等待继续操作,注意这个时候主线程并没有休眠和关闭,而是在监视你的下一步操作,假如你没有可能进行下一步操作才会进行关闭
例如你的程序如果没有READLINE的话,他就会关闭,主线程关闭后,依赖他所有的资源都会被释放,子线程必然也会被关闭
{
object obj = new object();
static void Main(string[] args)
{
Console.WriteLine("主线程开始....");
MyThread myTread = new MyThread();
Thread th = new Thread(myTread.TheTask);
th.Start();
Thread.Sleep(1000);
Console.WriteLine("主线程结束");
Console.ReadLine();
}
}
class MyThread {
public void TheTask() {
Console.WriteLine("辅线程开始");
for (int i = 0; i < 10;i++ ) {
//Thread.Sleep(500);
Console.WriteLine(i);
}
Console.WriteLine("辅线程结束");
}
}
你这样改后,你运行看就明白什么原因了,哈哈,很简单~~~