我对c#和编码很新,并且在for循环中实现定时器时遇到一些问题。基本上,下面的代码位试图以设定的间隔创建一个代表岛屿垃圾输出的数字,每个输出基于岛屿种群加权的可预测性稍差。然后它将生成的垃圾数量添加到总数中。我遇到的问题是教程使用Timer类的方式意味着在'Intervaltimer_Elapsed(object sender, ElapsedEventArgs e)'
之外创建Main()
函数,我无法弄清楚如何将此生成的任何内容添加回到weights[]
中的Main()
数组。我真正想做的就是编译器进入for循环,告诉它等待'x'滴答,然后继续。 Thread.Sleep不是一个选项,因为这是统一的,所以会打断其他事情。如果下面的代码有点血腥,请道歉!
{
class Program
{
public static double trashperstan8 = 600 * 3.21;
public static int population = 1000;
public static double trashperpersperday = 1;
public static double interval = 60;
public static double intperday = 1440 / interval;
public static double trashperint = population * trashperpersperday * (interval / 1440);
public static int weightnum = population / 200;
static void Main(string[] args)
{
double Trashlevel = new double();
double stand8sfilled = new double();
Timer intervaltimer = new Timer((interval / 30) * 1000);
Console.WriteLine(weightnum);
for (int inti = 0; inti < intperday; inti++)
{
/* at this point, I want to basically tell the code: each time you go
through the for loop, wait for x number of ticks then do the method */
Console.WriteLine(inti);
double[] weights = new double[weightnum];
Random rand = new Random();
for (int i = 0; i < weightnum; i++)
{
double weightcontrib = rand.NextDouble();
weights[i] = weightcontrib;
Console.WriteLine("{0}: {1}", Array.IndexOf(weights, weightcontrib), weightcontrib);
}
double finalweight = 2 * (weights.Sum() / weightnum);
Console.WriteLine("final weight " + finalweight);
double weightedtpi = trashperint * finalweight;
Trashlevel = Trashlevel + weightedtpi;
stand8sfilled = stand8sfilled + (weightedtpi / trashperstan8);
}
Console.WriteLine("trash level " + Trashlevel);
Console.WriteLine("stand8s filled " + stand8sfilled);
}
private static void Intervaltimer_Elapsed(object sender, ElapsedEventArgs e)
{
}
}
}
答案 0 :(得分:4)
我真正想做的就是编译器进入for循环,告诉它等待'x'滴答,然后继续。 Thread.Sleep不是一个选项,因为这是统一的,所以会打断其他事情。
解决方案1:根本不要编写循环。 计时器已经逻辑上是一个循环。
解决方案2:编写循环,不要使用计时器。
将方法async
然后await Task.Delay(whatever);
设置为异步等待延迟。您的方法将在等待等待时暂停,并在延迟任务完成后的某个时刻恢复。
后者可能是更好的解决方案,因为代码更类似于您对它的描述。
我对Unity的了解不足以说明哪个是他们框架中更好的解决方案。