如何在重新开始之前杀死线程

时间:2019-06-08 22:17:55

标签: c# multithreading

我的目标是在主程序中创建一个线程列表,将其传递给一个我想启动每个线程并在之后杀死它们的类。基本上,我需要在Main中声明一个线程列表,然后在我的类中启动和中止它们。发生的事情是我的程序崩溃,因为它显然试图运行已运行的线程。我应该在代码中进行哪些更改以避免出现此问题?我试图中止线程,尽管它不起作用。

我认为运行和中止线程是愚蠢的,但是我正在做一个学校项目,所以这是我的专业要求之一。

//main

 class MainClass
    {

        public static void Main(string[] args)
        {

            List<HopTruck> listTH = new List<HopTruck>();
            List<BarleyTruck> listTB = new List<BarleyTruck>();
            List<WaterTruck> listTW = new List<WaterTruck>();
            List<Thread> listThreads = new List<Thread>();

            .... ....
        }
    }
public class SuperVisor : Interface
    {
        private List<WaterTruck> listTW;
        private List<BarleyTruck> listTB;
        public List<HopTruck> listTH;
        public List<Thread> listThreads;

public SuperVisor(List<HopTruck>listath, List<WaterTruck> listatw, List<BarleyTruck> listatb, List<Thread> listafred, ...)
        {
            ...

            ...

            this.listTH = listath;
            this.listTB = listatb;
            this.listThreads = listafred;
            this.listTW = listatw;
        }

someFunction()
{
for(int i = 1; i<=iletrzebaWody;i++)
                             {
                                 listTW.Add(new WaterTruck(warzelnia, 10));


                             }   
                            foreach(WaterTruck elem in listaTW)
                            {
                                 listThreads.Add(new Thread(elem.Drive));   
                            }

                            listTB = new List<BarleyTruck>();
                            for(int i = 1; i<=iletrzebaBarley;i++)
                             {
                                 listTB.Add(new BarleyTruck(warzelnia, 10));
                                 Console.WriteLine("SV dodaje BarleyTruck: "+i);

                             }   
                            foreach(BarleyTruck elem in listaTB)
                            {
                                 listaFredow.Add(new Thread(elem.Run));   
                            }


                            listaTH = new List<HopTruck>();
                            for(int i = 1; i<=iletrzebaHop;i++)
                             {
                                 listaTH.Add(new HopTruck(warzelnia, 10));
                                Console.WriteLine("SV dodaje HopTruck: "+i);

                             }   
                            foreach(HopTruck elem in listaTH)
                            {
                                 listaFredow.Add(new Thread(elem.Run));   
                            }


                        foreach (var thread in listaFredow)
                            {
                                thread.Start();
                            }
                    }

0 个答案:

没有答案