我的目标是在主程序中创建一个线程列表,将其传递给一个我想启动每个线程并在之后杀死它们的类。基本上,我需要在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();
}
}