c# |程序在线程执行后什么都不做
本文关键字:什么 执行 程序 线程 | 更新日期: 2023-09-27 18:10:58
我的线程应该返回一个数组列表并将其放入文件中。
我的问题是,它只是停止(至少这是我怎么看它)。
线程:
ArrayList files = new ArrayList();
Thread getF = new Thread(delegate()
{
files = GetFiles(path);
});
getF.Start();
if (getF.ThreadState == ThreadState.Stopped)
{
MessageBox.Show(files.Count.ToString());
foreach (string file in files)
{
if (file != "")
{...
getfile:
ArrayList results = new ArrayList();
try
{
*loops**code*...
results.Add(srl);//add file to arrFiles
*end loops*
MessageBox.Show("Complete");
return results;
}
程序只给我MessageBox.Show("Complete"),然后什么也不做。
getF.Start();
if (getF.ThreadState == ThreadState.Stopped)
{
//...
}
if()语句永远不会执行。线程完成它的工作需要时间。您必须插入getF.Join(),但这违背了使用线程的意义。
当然,Thread.Start()
在线程启动后立即返回。因此,在检查ThreadState之前,您应该等待它完成工作。在这个问题
很可能在执行条件语句之前线程还没有完成。也就是说,你有:
getF.Start();
if (getF.ThreadState == ThreadState.Stopped)
在您测试它是否停止之前,线程可能甚至不会启动。你必须有办法让主线程知道另一个线程完成了它的工作。
等待线程完成的典型方法是调用Join
。即:getf.Start();
getf.Join(); // suspends main thread until the child thread is done
但是如果你这样做,你会阻塞你的用户界面。
使用多个线程的原因是,主线程(UI线程,在你的情况下)可以做其他事情,而其他线程正在做他们的工作。我怀疑你想要的是一个BackgroundWorker,将得到文件,然后执行一些动作后,它完成-在RunWorkerCompleted
事件处理程序。