Синхронизация потоков - C# (206103)
Формулировка задачи:
Здравствуйте! Я понимаю, что подобные вопросы уже много раз задавались, но перечитав подобные темы та и другую литературу, так и не смог найти решения для моей задачи.
Вообщем в от в чем дело! У меня есть 2 потока. Первый это основной поток, который запускается при запуске программы и второй, который я создаю сам. Проблема в том, что я так и не понял, как правильно их синхронизировать.
У меня есть pictureBox, который я передаю в свой поток, который в свою очередь передвигает ее по канве. Проблема в том, что выбивает такову ошибку "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'pictureBox1' не из того потока, в котором он был создан."
Прошу дописать в мой код нужные строчки, которые помогут программе заработать и обьяснить, что они означают более детально.
Заранее спасибо!!
Код осн. программы:
Код потока:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Timers;
namespace LB_03
{
public partial class Form1 : Form
{
PictureBox img = new PictureBox();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
img = pictureBox1;
}
private void button1_Click(object sender, EventArgs e)
{
Thread MainThrd = Thread.CurrentThread;
EnemyThread t1 = new EnemyThread(img);
t1.thrd.IsBackground = true;
t1.Priority = ThreadPriority.Lowest;
t1.thrd.Join();
}
private void timer1_Tick(object sender, EventArgs e)
{
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Drawing;
namespace LB_03
{
class EnemyThread
{
public PictureBox img;
public Thread thrd;
public EnemyThread(PictureBox img)
{
this.img = img;
thrd = new Thread(new ThreadStart(this.run));
thrd.Start();
}
void run()
{
for (int i = 0; i < 40; i += 1)
{
Thread.Sleep(100);
img.Location = new Point(img.Location.X + 10, img.Location.Y);
}
}
public ThreadPriority Priority { get; set; }
}
}Решение задачи: «Синхронизация потоков»
textual
Листинг программы
namespace LB_03
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
EnemyThread t1 = new EnemyThread(pictureBox1);
t1.Start();
}
}
}