Задача и не закрываться, пока у базовой задачи не появятся дочерние элементы

У меня есть имена классов (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