Есть ли способ обновить форму windows в al oop? - PullRequest
0 голосов
/ 02 августа 2020

Моя цель - сделать настольного питомца. Я уже запрограммировал множество logi c, которые выполняются через некоторое время l oop и обновляют каждую итерацию. Чтобы отобразить существо, я хочу использовать формы windows, но это вызвало дилемму.

Я хочу иметь возможность выполнить logi c, а затем обновить окно в том же l oop (обработка событий и перерисовка), без необходимости иметь дело с Application.Run() или многопоточностью. В качестве примера, и как кто-то из python, используя tkinter, можно вызвать метод update() в окне в al oop, что по сути то же самое, что вызов mainloop() один раз, за ​​исключением того, что это не так. t заблокировать программу.

Предлагают ли формы аналогичные функции?

1 Ответ

1 голос
/ 02 августа 2020

Как упоминал Скотт Чемберлен, вы должны использовать таймер для запуска «l oop». Winforms основан на событиях, поэтому добавление бесконечного l oop заморозит программу, поскольку события заблокированы.

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

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Timer tmr = new Timer();
        tmr.Interval = 50;   // milliseconds
        tmr.Tick += Tmr_Tick;  // set handler
        tmr.Start();
    }

    private void Tmr_Tick(object sender, EventArgs e)  //run this logic each timer tick
    {
        pictureBox1.Left += 1;  // move image across screen, picture box is control so no repaint needed
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...