关于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()时,线程也同时关闭了?这是为什么?解决问题加分 展开
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()时,线程也同时关闭了?这是为什么?解决问题加分 展开
展开全部
你是怎么调用用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内部的消息运作原理没找到,你要自己查一下了。
展开全部
线程的生命周期已经完了,listThread都是空的,怎么会执行foreach语句呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码不全 无法解答
追问
就一个调用outthread()函数,其他地方都没有用到多线程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询