C# 线程……Main()中如果不写Thread.Sleep(一段时间),子线程就不能执行吗?
请看代码:前面把Alpha、Beta什么的都搞好了……Main()中:stringstr=Thread.CurrentThread.Name;Console.WriteL...
请看代码:
前面把Alpha、Beta什么的都搞好了……
Main()中:
string str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
Alpha myAlpha = new Alpha();
Thread myThread = new Thread(new ThreadStart(myAlpha.Beta));
myThread.Name = "哥们儿的线程";
myThread.Start();
//Thread.Sleep(1000); //让主线程睡觉zz~~
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Abort();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Join();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
如果注释了让主线程睡觉的那句,str一路下来都是主线程的Name(也就是null),没有哥们儿的线程什么事;如果取消注释,哥们儿的线程就运行的很high.
baffle me…… 展开
前面把Alpha、Beta什么的都搞好了……
Main()中:
string str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
Alpha myAlpha = new Alpha();
Thread myThread = new Thread(new ThreadStart(myAlpha.Beta));
myThread.Name = "哥们儿的线程";
myThread.Start();
//Thread.Sleep(1000); //让主线程睡觉zz~~
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Abort();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Join();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
如果注释了让主线程睡觉的那句,str一路下来都是主线程的Name(也就是null),没有哥们儿的线程什么事;如果取消注释,哥们儿的线程就运行的很high.
baffle me…… 展开
5个回答
展开全部
【有疑问可以HI我,或追问,但请不要关闭问题,谢谢!】
贴上一个你的代码的改版的程序源码你就知道怎么回事了。
1、Main里面Thread.CurrentThread获取的始终是主线程
2、新建的线程,跑完全部就自动结束的
3、myThread.Start();
//Thread.Sleep(1000); //让主线程睡觉zz~~
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Abort();
这里myThread开始后与主线程一起运行,可是主线程却立刻把myThread终止掉了,于是myThread就根本没跑过。你让Thread.Sleep(1000); 这一句有效的话,对主线程阻塞了一定时间,myThread就得以跑起来~~
4、要输出子线程的名字,放在线程的函数Beta里。
5、增加一个“弟弟们”的线程,辅助观察效果。
【本题回答已完全超过了0分题的回答了。用心回答,只为助人】
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace Alpha
{
class Alpha
{
static void Main(string[] args)
{
string str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
Alpha myAlpha = new Alpha();
Thread myThread = new Thread(new ThreadStart(myAlpha.Beta));
myThread.Name = "哥们儿的线程";
myThread.Start();
Thread myThread2 = new Thread(new ThreadStart(myAlpha.Beta));
myThread2.Name = "弟弟们的线程";
myThread2.Start();
//Thread.Sleep(1000); //让主线程睡觉zz~~
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
//myThread.Abort();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Join();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
Console.Read();
}
private void Beta()
{
for (int i = 0; i < 100; i++)
{
Console.Write("{0} ", i);
}
string str = Thread.CurrentThread.Name;
Console.WriteLine("\n当前线程: " + str);
}
}
}
贴上一个你的代码的改版的程序源码你就知道怎么回事了。
1、Main里面Thread.CurrentThread获取的始终是主线程
2、新建的线程,跑完全部就自动结束的
3、myThread.Start();
//Thread.Sleep(1000); //让主线程睡觉zz~~
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Abort();
这里myThread开始后与主线程一起运行,可是主线程却立刻把myThread终止掉了,于是myThread就根本没跑过。你让Thread.Sleep(1000); 这一句有效的话,对主线程阻塞了一定时间,myThread就得以跑起来~~
4、要输出子线程的名字,放在线程的函数Beta里。
5、增加一个“弟弟们”的线程,辅助观察效果。
【本题回答已完全超过了0分题的回答了。用心回答,只为助人】
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace Alpha
{
class Alpha
{
static void Main(string[] args)
{
string str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
Alpha myAlpha = new Alpha();
Thread myThread = new Thread(new ThreadStart(myAlpha.Beta));
myThread.Name = "哥们儿的线程";
myThread.Start();
Thread myThread2 = new Thread(new ThreadStart(myAlpha.Beta));
myThread2.Name = "弟弟们的线程";
myThread2.Start();
//Thread.Sleep(1000); //让主线程睡觉zz~~
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
//myThread.Abort();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
myThread.Join();
str = Thread.CurrentThread.Name;
Console.WriteLine("当前线程: " + str);
Console.Read();
}
private void Beta()
{
for (int i = 0; i < 100; i++)
{
Console.Write("{0} ", i);
}
string str = Thread.CurrentThread.Name;
Console.WriteLine("\n当前线程: " + str);
}
}
}
展开全部
你去掉注释还不是一路都是主线程的Name
main是运行在主线程中,main中的Thread.CurrentThread不管你怎么捣鼓都是主线程
你现在这个代码,myThread一开始运行,跟着就被Abort了,当然没多少时间可活
你加上Sleep就可以多活一段时间
另外,前边都已经Abort了,后面的myThread.Join也没什么意义了
main是运行在主线程中,main中的Thread.CurrentThread不管你怎么捣鼓都是主线程
你现在这个代码,myThread一开始运行,跟着就被Abort了,当然没多少时间可活
你加上Sleep就可以多活一段时间
另外,前边都已经Abort了,后面的myThread.Join也没什么意义了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
oid Sleep(int millisecondsTimeout)
这个Sleep方法是Thread类的静态方法。就是说你调用这个方法是不能指定是哪个Thread。而调用的结果就是自己所在的Thread被停止一定时间。
这个Sleep方法是Thread类的静态方法。就是说你调用这个方法是不能指定是哪个Thread。而调用的结果就是自己所在的Thread被停止一定时间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不写 当然可以执行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有这回事, 子线程start了吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询