Задача и не затваряйте, докато основната задача няма деца

Имам имена на класове (ConsoleApplication) ClassA с поле:

public class ClassA
{
        List<Task> Tasks;
        (...)
        public void PlotGrid()
        {
                Action<object> action = new Action<object>(ShowChart);
                Task task = new Task(action, intervalX);
                task.Start();
                Tasks.Add(task);
        }
        (...)
        private void ShowChart(object intervalX)
        {
                int interval = Convert.ToInt32(intervalX);
                ChartForm chart = new ChartForm(GetValuesForPlotting(), interval);
                chart.ShowDialog();
        }
}

(Описание на ChartForm в края на публикацията) Добре. Когато създам ClassA в Program.cs:

class Program
{
    static void Main(string[] args)
    {
            ClassA class = new ClassA();
            class.PlotGrid();
            Console.WriteLine("it was shown as parallel with windowsform(the ChartForm)");
    }
}

В терминала беше показано: беше показано като паралелно с windowsform (ChartForm), но ChartForm не беше показан. Искам да създам descructor или друг начин за ClassA. Как мога да го направя, ако родител (ClassA) има деца (ChartForm) и докато има деца, които се изпълняват - не затваряйте приложението. Опитах се да добавя в деструктора ClassA:

~ClassA()
{
    Task.WaitAll(Tasks.ToArray());
}

но не помогна.

Клас ChartForm е от друг проект, който наследява WindowsForms (Form) и има само един обект: Chart.

Моля, погледнете по-долу:

   public partial class ChartForm : Form
   {
        private List<Complex> valuesForPlotting;
        int intervalX;
        public ChartForm(List<Complex> valuesForPlotting, int intervalX)
        {
            InitializeComponent();
            this.valuesForPlotting = valuesForPlotting;
            this.intervalX = intervalX;
        }
        private void Form1_Load(object sender, EventArgs e)
        {   
            chart1.ChartAreas[0].AxisX.Interval = intervalX;
            chart1.ChartAreas[0].AxisX.Minimum = 0;
            chart1.ChartAreas[0].AxisX.Maximum = valuesForPlotting.Max(p=> p.Real)+intervalX;

            for (int i = 0; i < valuesForPlotting.Count; i++)
            {
                chart1.Series["ser1"].Points.AddXY
                                (valuesForPlotting[i].Real, valuesForPlotting[i].Imaginary);
            }

            chart1.Series["ser1"].ChartType = SeriesChartType.FastLine;
            chart1.Series["ser1"].Color = Color.Red;
        }

   }

person Marek Woźniak    schedule 11.11.2014    source източник
comment
Може би този въпрос ще бъде от значение? Показване на WinForm от C# конзолно приложение и изчакване да се затвори. Този въпрос също може да бъде полезен: Показване на формуляр от скрито конзолно приложение.   -  person Jeff B    schedule 11.11.2014
comment
Има толкова много нередни неща: опитвате се да покажете диалоговия прозорец от фонова нишка, вие блокиране на финализатора при изчакване на задачи, вие не дефинирате STAThread... Откъде да започна?   -  person galenus    schedule 11.11.2014
comment
Благодаря ви за отговорите. Ще ми помогне, но аз съм зелен в резбите. Трябва да прочета повече за паралела.   -  person Marek Woźniak    schedule 11.11.2014