0

Вот построенная программа Win Form (C#)

    namespace sharp_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            SoundPlayer simpleSound = new SoundPlayer(@"kurlik.wav");
            simpleSound.PlayLooping();
        }


    }
}

Вопрос в том, что не могу не как разобраться как создать теперь бесконечный цикл при этом чтобы была возможность обращения к контроллам формы.

Вот этот код нужно заставить работать в цикле (в фоне)

{
    Random rnd = new Random();
    int xi = 1;
    int yi = 1;
    while (true)
    {
        int vx = rnd.Next(0, 1);
        int vy = rnd.Next(0, 1);
        if (vx == 1) xi *= 1; else xi *= -1;
        if (vy == 1) yi *= 1; else yi *= -1;
        while (pictureBox1.Location.X > 12 & pictureBox1.Location.X < 272 & pictureBox1.Location.Y > 12 & pictureBox1.Location.Y < 249)
        {

            pictureBox1.Location = new Point(pictureBox1.Location.X + xi, pictureBox1.Location.Y + yi);
            textBox1.Text = Convert.ToString(pictureBox1.Location.X + xi);
        }
    }
}

(Если кратко, то эта программа должна перемещать картинку от края до края с самого запуска приложения)

п.с пробовал через таймер и потоки, но так и не смог понять как выполнить обращение к контроллам, все время появлялась ошибка. Буду благодарен за любой пример кода.

dm.dymov
  • 1,045
  • 2
    Через потоки или таймер, обращение к контролам через invoke – user2455111 Jul 18 '17 at 02:30
  • По обращению к интерфейсу из другого потока можете посмотреть ответы здесь: https://ru.stackoverflow.com/questions/418461/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%B0%D0%BC%D0%B8-%D0%B8%D0%B7-%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0 – default locale Jul 20 '17 at 11:50

1 Answers1

1

Если просто, то это связано с тем, что графический интерфейс пользователя работает в отдельном потоке и защищен для доступа из других потоков.

Можно использовать класс Timer из пакета System.Windows.Forms: https://msdn.microsoft.com/ru-ru/library/system.windows.forms.timer(v=vs.110).aspx

Так же по ссылке вы найдете короткий пример использования.

artwolf
  • 182