protected void AddStateReachedHandler(AlgorithmRun <TIn, TOut> run, RunState state, Action <AlgorithmRun <TIn, TOut> > handler) { //wrap the handler RunStateChangedHandler <TIn, TOut> act = (r, s) => { if (s == state) { handler(r); } }; run.StateChanged += act; stateChangedHandlers[run].Add(act); }
private void AddRunToTable(AlgorithmRun <TIn, TOut> run) { var rowIndex = workloadTable.Rows.Add(run, run.Input, run.Algorithm, run.NumIterations); var row = workloadTable.Rows[rowIndex]; row.ReadOnly = run.State != RunState.Idle; var multCell = row.Cells["workloadTableAmountColumn"]; var foreColor = Color.FromArgb(255, 40, 40, 40); multCell.Style.ForeColor = foreColor; multCell.Style.SelectionForeColor = foreColor; RunStateChangedHandler <TIn, TOut> stateChanged = (r, state) => { Color color = multCell.Style.BackColor; switch (state) { case RunState.Idle: color = Color.IndianRed; break; case RunState.Started: color = Color.Yellow; break; case RunState.OutputAvailable: color = Color.GreenYellow; break; case RunState.Finished: color = Color.LimeGreen; break; } multCell.Style.BackColor = color; multCell.Style.SelectionBackColor = color; RunsUpdated(); }; stateChanged(run, run.State); run.StateChanged += stateChanged; }