не удается преобразовать из "void" в "System.Threading.TimerCallback"

Рейтинг: 0Ответов: 1Опубликовано: 12.04.2023

Здраствуйте, в чём суть, мне надо чтобы метод сам себя вызывал каждую секунду с нужными параметрами. Перепробовал кучу способов, но вылезают одни и те же ошибки, то в лямде нельзя использовать ref, то (не удается преобразовать из "void" в "System.Threading.TimerCallback") и т.д. Был бы рад, если вы мне помогли.

Сам метод:

private void F(ref int Progress, Label Info_progress)
    {
        System.Threading.Timer timer = new System.Threading.Timer(F(ref Progress, Info_progress), null, 1010, 1000);
        Info_progress.Text = $"{Progress}%";
    }

Весь код, если нужно:

namespace _5;

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

    private void Play_(object a, EventArgs e, Label Title, Button B_Play)
    {
        Title.Dispose();
        B_Play.Dispose();

        Label Info = new();
        Info.Location = new Point(1,1);
        Info.AutoSize = true;
        Info.Font = new Font("Airal", 15);
        Info.Text = "Не позволяй чайнику остыть!";
        Controls.Add(Info);

        int Progress = 25;

        Label Info_progress = new();
        Info_progress.Location = new Point(140,150);
        Info_progress.AutoSize = true;
        Info_progress.Font = new Font("Airal", 14);
        Info_progress.Text = $"{Progress}%";
        Controls.Add(Info_progress);

        Button Clicker_Warm = new();
        Clicker_Warm.Location = new Point(55, 350);
        Clicker_Warm.AutoSize = true;
        Clicker_Warm.Font = new Font("Arial", 16);
        Clicker_Warm.Text = "Подогреть";
        Clicker_Warm.BackColor = Color.Orange;
        Clicker_Warm.Click += (a,e) =>
        {
            if (Progress != 100)
            {
                Logic_class.Logic_(ref Progress);
                Info_progress.Text = $"{Progress}%";
            }
        };
        Controls.Add(Clicker_Warm);



        F(ref Progress, Info_progress);
    }
    private void F(ref int Progress, Label Info_progress)
    {
        System.Threading.Timer timer = new System.Threading.Timer(F(ref Progress, Info_progress), null, 1010, 1000);
        Info_progress.Text = $"{Progress}%";
    }
}

Ответы

▲ 0Принят

Не нужно создавать таймер каждый раз при вызове метода. Таймер создайте отдельно, установите период 1 с, а в обработчик события таймера подставьте метод, который что-то будет делать.