C# 如何在selenium线程/类中更新UI线程/类上的标签

C# 如何在selenium线程/类中更新UI线程/类上的标签,c#,multithreading,user-interface,selenium,C#,Multithreading,User Interface,Selenium,因此,在如何从selenium线程更新UI线程上的标签方面,我遇到了一个问题。正如您所见,selenium线程调用“selenium”方法,该方法使用来自其他类的静态方法(Login.UserLogin、Run.StartDriver) 我似乎不知道如何从login或run类更改此类中的标签。抱歉,如果编码是业余的,我刚开始学习c } 在登录/运行类中添加静态事件 在窗体类中注册到事件 When事件将通过此.beginInvoke()函数更新标签(因为它不是UI线程) 公共类登录 { 公共静态事

因此,在如何从selenium线程更新UI线程上的标签方面,我遇到了一个问题。正如您所见,selenium线程调用“selenium”方法,该方法使用来自其他类的静态方法(Login.UserLogin、Run.StartDriver)

我似乎不知道如何从login或run类更改此类中的标签。抱歉,如果编码是业余的,我刚开始学习c

}

  • 在登录/运行类中添加静态事件
  • 在窗体类中注册到事件
  • When事件将通过此.beginInvoke()函数更新标签(因为它不是UI线程)

    公共类登录
    {
    公共静态事件行为变化;
    私有静态void OnTextChange(字符串newText)
    {
    if(TextChange!=null)
    文本更改(newText);
    }
    公共静态void UserLogin(字符串驱动程序、字符串用户名、字符串密码)
    {
    OnTextChange(用户名);
    }
    }
    公开课表格1
    {
    私有无效注册表登录()
    {
    Login.TextChange+=Login\u TextChange;
    }
    私有无效登录\u文本更改(字符串newText)
    {
    this.BeginInvoke(()=>label.text=newText);
    }
    }
    
  • 在登录/运行类中添加静态事件
  • 在窗体类中注册到事件
  • When事件将通过此.beginInvoke()函数更新标签(因为它不是UI线程)

    公共类登录
    {
    公共静态事件行为变化;
    私有静态void OnTextChange(字符串newText)
    {
    if(TextChange!=null)
    文本更改(newText);
    }
    公共静态void UserLogin(字符串驱动程序、字符串用户名、字符串密码)
    {
    OnTextChange(用户名);
    }
    }
    公开课表格1
    {
    私有无效注册表登录()
    {
    Login.TextChange+=Login\u TextChange;
    }
    私有无效登录\u文本更改(字符串newText)
    {
    this.BeginInvoke(()=>label.text=newText);
    }
    }
    
  • public class Form1{
    
     private void startThread()
         {
            if (seleniumThread == null)
            {
              stopThread = false;
              seleniumThread = new Thread(() => selenium(userName,  passWord,
              cyclesWanted));
    
                seleniumThread.Start();
            }
        }
    
    private void selenium(string user, string pass, int cycles)
        {
    
            driver = new FirefoxDriver();
    
            Login.UserLogin(driver, user, pass);
    
            Run.StartDriver(driver, cycles);
    
            if (stopThread)
            {
                driver.Quit();
                return; 
            }        
        }
    
    private void button1_Click(object sender, EventArgs e)
        {
        startThread();
         }
    
      public class Login
        {
    
            public static event Action<string> TextChange;
    
    
            private static void OnTextChange(string newText)
            {
                if (TextChange != null)
                    TextChange(newText);
            }
    
            public static void  UserLogin(string driver, string userName,string password)
            {
                OnTextChange(userName);
            }
    
        }
    
    
        public class Form1
        {
    
            private void registerLoginEvent()
            {
                Login.TextChange += Login_TextChange;
            }
    
            private void Login_TextChange(string newText)
            {
                this.BeginInvoke(()=>label.text = newText);
            }
    
        }