OriginalGriff
Прекратите использовать нить.Сон: это приводит к тому, что весь ваш поток - в данном случае поток пользовательского интерфейса, который выполняет всю работу по обработке дисплея и всего пользовательского ввода - приостанавливается.
И даже если бы это было не так, этот код представляет собой цикл внутри обработчика событий Click.
Это означает, что экран не обновляется, а щелчки мыши не работают, пока вы не покинете метод!
Выбросьте цикл-окна вообще и C# в частности не работают так за пределами консольных приложений.
Добавьте таймер в свою форму. Установите свойство Interval равным 100 и запустите его.
Добавить уровень класса типа bool называется "перемещение" и запустить если как ложные.
В вашем событии нажатия кнопки инвертируйте начало вашей" движущейся " переменной.
Обработки события Tick таймера.
В обработчике установите флажок "перемещение". Если это правда, сделайте свой код внутри цикла один раз, и только один раз. )Это будет означать переезд i
и до уровня класса тоже. Если это ложь, ничего не делайте.
Кстати: это не лучший способ сделать работу, и это действительно опасно. На данный момент в конце любого метода вызовите Dispose для всех созданных Вами графических элементов:
g1.Dispose();
g2.Dispose();
Если вы этого не сделаете, ваше приложение рухнет раньше, чем вы думаете...
Есть более эффективные способы, такие как выполнение кода рисования в событии Form Paint, но это, как я подозреваю, на потом.