加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在这种情况下主线程会发生什么

发布时间:2020-12-15 19:51:06 所属栏目:百科 来源:网络整理
导读:我有以下多线程程序: class Program{ static void main(){ (new Thread(DoSomething)).Start(); } static void DoSomething(){ // Dome something here... }} 几个问题: 旋转子线程后主线程是否退出? 如果它确实退出并且子线程是后台线程:主进程是退出还
我有以下多线程程序:

class Program{
  static void main(){
    (new Thread(DoSomething)).Start();
  }
  static void DoSomething(){
    // Dome something here...
  }
}

几个问题:

>旋转子线程后主线程是否退出?
>如果它确实退出并且子线程是后台线程:主进程是退出还是等待后台线程完成?

解决方法

通常,如果要等待子线程完成,则需要添加x.Join(); line(其中x是您的线程的变量),无论您希望主线程停止并等待子项完成.

编辑:是的,主要线程将退出,除非出现以下三种情况之一:
a)生成的线程在主线程代码的其余部分之前完成(如果你添加任何)

b)您有一个等待线程完成的条件(例如我提到的Join语句,但还有其他方法).

c)主线程进入半无限循环(例如游戏/图形引擎).

在您的简单示例中,它将确定退出(给出您的问题的参数,后台线程).

编辑2:对不起,我似乎已经回避了你的第二个问题(实际上只考虑了背景线程).如果它是一个后台线程,它将按照我的解释退出,如果它是前景,那么它不应该(虽然我对前景线程没有太多经验,所以我不能肯定地说).

所以回答你的问题:是的,主线程退出.是的,如果孩子特别是后台线程,那么该过程也会退出.

编辑3:最后编辑,我保证.我只想添加一些代码,以便您可以自己证明答案(这总是很好):

static void Main(string[] args)
{
    Thread thready = new Thread(DoSomething);
    thready.IsBackground = true;
    thready.Start();
}

static void DoSomething()
{
    while (true)
    {
        Console.Write("thread's looping n");
    }
}

通过切换thready.IsBackground = true;到thready.IsBackground = false;你得到一个永远运行的程序(直到线程没有退出).保持真实状态将很快退出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读