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"),然后什么也不做。

c# |程序在线程执行后什么都不做

        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事件处理程序。