Счетчик кнопок Windows форм - PullRequest
0 голосов
/ 20 апреля 2020

Я хотел бы спросить вас об исправлении моего кода. Я хотел создать кнопку после нажатия на кнопку текст будет меняться каждую секунду (асинхронно). Этот код правильный или я должен делать это по-другому?

  public partial class Form1 : Form
{
    public List<int> figures = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    public Form1()
    {
        InitializeComponent();
    }

    private async void button1_ClickAsync(object sender, EventArgs e)
    {
        foreach(var figure in figures)
        {
            await TimeSleeper(figure);
        }

    }
    public async Task TimeSleeper(int figure)
    {
        button1.Text = figure.ToString();
        await Task.Run(() => Thread.Sleep(1000));
        button1.Refresh();
    }    
}

1 Ответ

1 голос
/ 20 апреля 2020

Совершенство в глазах смотрящего, я полагаю. Но на самом деле это не очень хороший способ сделать это: P

Вместо определения списка "цифр" вы можете использовать

IEnumerable.Range(1, 10)

Документация: https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.range?view=netframework-4.8

TL: DR, он определяет диапазон, начиная с первого и заканчивая последним параметром.

Вместо выполнения

Task.Run(() => Thread.Sleep(1000));

Вы можете упростить его, выполнив

Task.Delay(1000)

Документация: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.delay?view=netframework-4.8

Кроме этого ... это работает правильно? И это читабельно, вот что важно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...