c#显示线程无效的跨线程访问问题

本文关键字:线程 访问 问题 无效 显示 | 更新日期: 2023-09-27 18:05:42

我的代码显示了线程无效的跨线程访问label_mytimer。Text = mytimleft + " Sec";在调试时运行,但在正常执行时,没有问题。我如何避免多多线程访问,我知道问题是许多线程试图同时访问我的文本框控件,不知道如何使用backgroundworker,如果它工作。

private void ttOnTimedEvent(object source, ElapsedEventArgs e)
    {
        if (mytimeLeft > 0)
        {
            // Display the new time left
            // by updating the Time Left label.
            mytimeLeft = mytimeLeft - 1;
            label_mytimer.Text = mytimeLeft + " Sec";//Show time left
        }
        else
        {
            label_mytimer.Text = "OK...";
            mytimeLeft = int.Parse(tBox_rp_Time.Text);
            mycountdownTimer.Stop();
            mycountdownTimer.Enabled = false;
        }

c#显示线程无效的跨线程访问问题

你可以使用MethodInvoker在GUI线程上运行

private void ttOnTimedEvent(object source, ElapsedEventArgs e)
{       
    MethodInovker mi = new delegate{
    if (mytimeLeft > 0)
    {
        // Display the new time left
        // by updating the Time Left label.
        mytimeLeft = mytimeLeft - 1;
        label_mytimer.Text = mytimeLeft + " Sec";//Show time left
    }
    else
    {
        label_mytimer.Text = "OK...";
        mytimeLeft = int.Parse(tBox_rp_Time.Text);
        mycountdownTimer.Stop();
        mycountdownTimer.Enabled = false;
    }
    };
    if(InvokeRequired)
       this.Invoke(mi);
 }