Как сделать так, чтобы ярлык менял текст каждый раз в C# windows формах - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть ярлык, который я хочу обновлять каждые 5 секунд. Это должно измениться с 1921 до 1922 года и далее до 1992 года. Я пытался использовать таймер, но это дало мне ошибку при доступе к неправильному потоку. Код, который я использовал, был:

    public partial class Form1 : Form
    {
        int x = 1921;
        public Form1()
        {
            InitializeComponent();
        }

        System.Timers.Timer myTimer = new System.Timers.Timer(1000);
        private void UpdateLabel(object sender, ElapsedEventArgs e)
        {
            label1.Text = x.ToString();
            x += 1;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            myTimer.Elapsed += UpdateLabel;
            myTimer.Start();
        }
    }

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

Попробуйте это:

private void UpdateLabel(object sender, ElapsedEventArgs e)
{
    //Invoke makes the UI thread call the delegate.
    Invoke((MethodInvoker)delegate {label1.Text = x.ToString(); });
    x += 1;
}
1 голос
/ 13 февраля 2020

попробуйте

   private readonly object y = new object();
    int x = 1921;
    public Form1()
    {
        InitializeComponent();
    }

    System.Timers.Timer myTimer = new System.Timers.Timer(1000);
    private void UpdateLabel(object sender, ElapsedEventArgs e)
    {
        Invoke((MethodInvoker)(() => { lock (y) { label1.Text = x.ToString(); x++; } }));
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        myTimer.Elapsed += UpdateLabel;
        myTimer.Start();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...