Here is what starts everything:
private void startEventClick(object sender, RoutedEventArgs e)
{
// Disable some of the UI
startEventsBtn.IsEnabled = false;
haltEventBtn.IsEnabled = true;
eRepeatTb.IsEnabled = false;
eDurationTb.IsEnabled = false;
eventRepeat = int.Parse(eRepeatTb.Text);
eventDuration = int.Parse(eDurationTb.Text);
totalTime = eventDuration * eventRepeat;
// Bits to write to device
devBits = getBitSettings();
if (devBits == 0)
MessageBox.Show("No Relays have been set. Check Settings", "SigmaDAC Lite Warning",
MessageBoxButton.OK, MessageBoxImage.Warning);
else
{
// Timer for count down clock
eventTimer = TimeSpan.FromMilliseconds(totalTime);
// Timer for event repeat
runTimer.Elapsed +=new ElapsedEventHandler(runTimer_Elapsed);
runTimer.Interval = eventDuration;
runTimer.AutoReset = true;
remainingTimeLbl.Content = eventTimer.ToString();
eventNumberLbl.Content = eventRepeat.ToString();
for (int i = 1; i <= eventRepeat; i++)
{
executeEventRun(devBits);
}
}
}
Then the executeEventRun():
private void executeEventRun(int bits)
{
int writeDev = DeviceHandler.writeReedOutputs(bits);
runTimer.Start();
if (writeDev < 0)
{
MessageBox.Show("Error writing to device: Code: " + writeDev.ToString(), "SigmaDAC Lite Error",
MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Finally the method to call once the interval has elapsed:
void runTimer_Elapsed(object sender, EventArgs e)
{
int turnOff = DeviceHandler.writeReedOutputs(0);
if (turnOff < 0)
{
MessageBox.Show("Error writing to device: Code: " + turnOff.ToString(), "SigmaDAC Lite Error",
MessageBoxButton.OK, MessageBoxImage.Error);
}
}
What i am thinking is that the "for loop" is finishing before the 1st event run is done...
Any ideas..? Ideally the for loop would wait for the runTimer.Interval before continuing...
Thanks.