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);
        }
Пример #2
0
        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;
        }