Okej, har testat lite här, inte riktigt kunnat se om det funkar som jag tänkt. Jag vill iaf att när hamstrarna anländer till dagis så ska jag efter en timme kolla om dom har varit ute, är deras "Activity" null så vill jag plocka ut dom 6 åt gången(eller mindre om det endast är färre kvar) och hane med hane och hona med hona. Såhär vill jag köra programmet(endast min test loop kommer se annorlunda ut sen):
for (int i = 0; i < 100; i++)
{
Console.WriteLine($"Time is {timeDiff}");
var timer = new System.Threading.Timer(
e => mm.ThreadLetHamstersPlay(),
null,
TimeSpan.FromMilliseconds(10000),
TimeSpan.FromMilliseconds(10000)
);
if(timeDiff == DateTime.Now.Date.Add(new TimeSpan(16, 30, 0)))
{
Console.WriteLine("Done for today, time to go home!");
Console.ReadKey();
break;
}
timeDiff += TimeSpan.FromMinutes(6);
Thread.Sleep(1000);
}
Den här loopen skall simulera 10 timmar, timeDiff ökar med 6 minuter per varv och jag vill köra min metod varje timme liksom, den körs efter första timmen, dock inte andra vilket får mig att tänka att det är min metod det är fel på. Den kommer här:
lock (hamsterLock)
{
using(var db = new HamsterContext())
{
int numberOfMaleHamstersOutOnExerciseArea = 0;
int numberOfFemaleHamstersOutOnExerciseArea = 0;
var availableSpaceInExerciseArea = db.ExerciseArea.Where(EA => EA.AvailableSpace == true).ToList();
var getMaleHamster = db.Hamsters.Where(H => H.Activity == null && H.Gender == "Male").ToList();
var getFemaleHamster = db.Hamsters.Where(H => H.Activity != null && H.Gender == "Female").ToList();
int maxLimit = availableSpaceInExerciseArea.Count <= getMaleHamster.Count ? availableSpaceInExerciseArea.Count : getMaleHamster.Count;
for (int i = 0; i < maxLimit; i++)
{
if (getMaleHamster[i].Activity == null)
{
getMaleHamster[i].Activity = Program.timeDiff;
availableSpaceInExerciseArea[i].AvailableSpace = false;
getMaleHamster[i].ExerciseAreaID = availableSpaceInExerciseArea[i].ExerciseAreaID;
PrintToConsole.getHamsters.Add(getMaleHamster[i]);
numberOfMaleHamstersOutOnExerciseArea++;
}
db.SaveChanges();
}
if(numberOfMaleHamstersOutOnExerciseArea > 0)
{
HamstersOut?.Invoke(this, new HamstersOutOnExerciseAreaEventArgs() { NumberOfHamstersOutOnExerciseArea = numberOfMaleHamstersOutOnExerciseArea });
}
PrintToConsole.getHamsters = null;
numberOfMaleHamstersOutOnExerciseArea = 0;
maxLimit = availableSpaceInExerciseArea.Count <= getFemaleHamster.Count ? availableSpaceInExerciseArea.Count : getFemaleHamster.Count;
for (int i = 0; i < maxLimit; i++)
{
if(getFemaleHamster[i].Activity == null)
{
getFemaleHamster[i].Activity = Program.timeDiff;
availableSpaceInExerciseArea[i].AvailableSpace = false;
getFemaleHamster[i].ExerciseAreaID = availableSpaceInExerciseArea[i].ExerciseAreaID;
PrintToConsole.getHamsters.Add(getFemaleHamster[i]);
numberOfFemaleHamstersOutOnExerciseArea++;
}
db.SaveChanges();
}
if(numberOfFemaleHamstersOutOnExerciseArea > 0)
{
HamstersOut?.Invoke(this, new HamstersOutOnExerciseAreaEventArgs() { NumberOfHamstersOutOnExerciseArea = numberOfFemaleHamstersOutOnExerciseArea });
}
PrintToConsole.getHamsters = null;
numberOfFemaleHamstersOutOnExerciseArea = 0;
}
}