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