我的线程应该返回一个数组列表并将其放入文件中 我的问题是它停止了(至少我是这样看的) 的主题:
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 != "")
{...
的GetFiles:
ArrayList results = new ArrayList();
try
{
*loops**code*...
results.Add(srl);//add file to arrFiles
*end loops*
MessageBox.Show("Complete");
return results;
}
程序只给我MessageBox.Show(“Complete”),然后什么都不做。 提前谢谢。
答案 0 :(得分:2)
getF.Start();
if (getF.ThreadState == ThreadState.Stopped)
{
//...
}
if()语句永远不会执行。线程需要时间来完成它的工作。你必须插入getF.Join(),但这会破坏使用线程的重点。
使用BackgroundWorker类。
答案 1 :(得分:1)
AFAIK,Thread.Start()
在线程启动后立即返回。因此,在检查ThreadState之前,您应该等待它完成工作。在This question
答案 2 :(得分:1)
在执行条件之前,线程很可能不会完成。也就是说,你有:
getF.Start();
if (getF.ThreadState == ThreadState.Stopped)
在测试之前,线程可能不会启动以查看它是否已停止。你必须有一些方法让主线程知道另一个完成了它的工作。
等待线程完成的典型方法是调用Join
。那就是:
getf.Start();
getf.Join(); // suspends main thread until the child thread is done
但如果你这样做,就会阻止你的用户界面。
使用多个线程的原因是主线程(在你的情况下是UI线程)可以做其他事情,而其他线程正在做他们的工作。我怀疑你想要的是一个BackgroundWorker来获取文件,然后在完成之后执行一些操作 - 在RunWorkerCompleted
事件处理程序中。