关于C#多线程的问题

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSy... using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WinformTest
{
class Threadtest
{
public static int n = 0;
// public int removenum;//被关闭线程的序号
List<Thread> listThread = new List<Thread>();
Thread thread=null;

//启动线程
public void threadtest()
{
thread=new Thread(new ThreadStart(test));
thread.Name = "Thread"+ n;
listThread.Add(thread);
thread.Start();
// thread.IsBackground = true;
n++;
}

//线程启动函数
private static void test()
{
Form2 form2 = new Form2();
form2.ShowDialog();
}

public void outthread()
{
foreach(Thread tempthread in listThread)
{
Console.WriteLine(tempthread.Name);
}
}

}
}

我在threadtest()中新建线程,但是为什么在其他类中调用outthread()函数不能输出线程的名字?
采用单步调试时,显示foreach语句中根本没有运行,这是为什么?
还有个问题就是:我是通过该线程新建了form2窗体,那为什么执行form.hide()时,线程也同时关闭了?这是为什么?解决问题加分
展开
 我来答
syht2000
高粉答主

2013-11-26 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部

你是怎么调用用Threadtest的,一般应该是这样

Threadtest t = new Threadtest();
t.threadtest();//启动线程
t.outthread();//此时就会进入foreach,form2此时还未显示出来


至于那个hide的问题,只有当showdialog出来的form2窗体hide或者关闭之后,创建form2的那个线程才能继续向下执行,向下执行的结果当然就是线程结束了。你可以简单的把test改成这样看看

private static void test()
{
    Form2 form2 = new Form2();
    form2.ShowDialog();
    int i = 0;
    while (true) //当你hide掉form2或者关闭之后,这个循环才开始运行
    {
        Console.WriteLine(i++);
        Thread.Sleep(100);
    }
}
追问
按你说的试了,行了。但是为什么hide掉form2才会执行那个while循环?
追答
这个跟ShowDialog有关了,一般的理解是当一个窗体ShowDialog之后,创建这个窗体的那个线程就会进入等待状态,直至这个ShowDialog出来的窗体被关闭或者被隐藏,至于再具体的showdialog内部的消息运作原理没找到,你要自己查一下了。
mit1208
2013-11-26 · TA获得超过2347个赞
知道大有可为答主
回答量:2743
采纳率:0%
帮助的人:1829万
展开全部
线程的生命周期已经完了,listThread都是空的,怎么会执行foreach语句呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1297175
2013-11-26 · 超过26用户采纳过TA的回答
知道答主
回答量:94
采纳率:100%
帮助的人:48.4万
展开全部
代码不全 无法解答
追问
就一个调用outthread()函数,其他地方都没有用到多线程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式