Как две разные графики строятся параллельно с помощью C#
Приветствую Всех,
Мне нужна помощь, чтобы построить две графики (разного стиля (точечная и прямоугольная точка)) параллельно, используя одни и те же данные на изображении. Эта графическая программа выполняется следующим образом:
1. читает текстовый файл, содержащий точки данных, которые должны быть нанесены на файл изображения, который загружается в поле изображения.
2. Программа использует кнопки и флажок.
3.после нажатия кнопки вверх выполнение программы начиналось с построения первого графика, однако при установке флажка второе графическое построение начиналось параллельно первому графику, а при снятии флажка второе графическое построение прекращалось. (Оба графических стиля используют один и тот же текстовый файл).
4. второй график фактически строит траекторию (непрерывный график / график отслеживания) первого графика. Как и тогда, когда пользователь хочет наблюдать траекторию (график отслеживания), поэтому установите флажок.
5. Я использовал технику резьбы, чтобы прочитать текстовый файл и активирует эту ветку под кнопки.
Мне нужна помощь, что делать в этом случае, должен ли я создать отдельный поток для флажка для построения второго графика параллельно с первым?
здесь я делюсь блоком своего кода, который я пытался реализовать, но он строит первую графику, и когда флажок установлен, программа строит первую и вторую графики непрерывно, что не соответствует моим требованиям программы. Я хочу построить прямоугольную точку непрерывно (трек-график) в качестве второго графика, когда флажок установлен.
Пожалуйста, помогите!
Что я уже пробовал:
public partial class Form1 : Form { double x; double y; Thread T; int F; delegate void refresh(); private System.Drawing.Graphics g; public Form1() { InitializeComponent(); } void refresh_PicBox() { if (pictureBox1.InvokeRequired) { refresh r = new refresh(refresh_PicBox); pictureBox.Invoke(r); } else { pictureBox.Refresh(); } } public void block() { StreamReader file = new StreamReader(@"C:\Text.txt"); string line; int sc = 100; while ((line = file.ReadLine()) != null) { char[] del = new char[] { '\t' }; string[] part = line.Split(del, StringSplitOptions.RemoveEmptyEntries); w = Convert.ToDouble(part[0]) * sc; z = Convert.ToDouble(part[1]) * sc; g = pictureBox.CreateGraphics(); if (flag == 0) { g.DrawImage(new Bitmap(@"C:\interface.png"), Convert.ToInt32(w), Convert.ToInt32(z), 20, 20); Thread.Sleep(50); refresh_PicBox();// invoke for refreshing picture box } if (flag == 1) { g.DrawImage(new Bitmap(@"C:\interface.png"), Convert.ToInt32(w), Convert.ToInt32(z), 20, 20); refresh_PicBox(); g.FillRectangle(Brushes.Blue, Convert.ToInt32(w), Convert.ToInt32(z), 9, 9); Thread.Sleep(50); } } } private void Form1_Load(object sender, EventArgs e) { pictureBox.Image = new Bitmap(@"C:\Image.jpg"); } private void button_Click(object sender, EventArgs e) { T = new Thread(block); T.Start(); flag = 0; } private void checkBox_CheckedChanged(object sender, EventArgs e) { if (checkBox.Checked) { flag = 1; } else { flag = 0; } } }