C# 如何在selenium线程/类中更新UI线程/类上的标签
因此,在如何从selenium线程更新UI线程上的标签方面,我遇到了一个问题。正如您所见,selenium线程调用“selenium”方法,该方法使用来自其他类的静态方法(Login.UserLogin、Run.StartDriver) 我似乎不知道如何从login或run类更改此类中的标签。抱歉,如果编码是业余的,我刚开始学习c }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线程) 公共类登录 { 公共静态事
公共类登录
{
公共静态事件行为变化;
私有静态void OnTextChange(字符串newText)
{
if(TextChange!=null)
文本更改(newText);
}
公共静态void UserLogin(字符串驱动程序、字符串用户名、字符串密码)
{
OnTextChange(用户名);
}
}
公开课表格1
{
私有无效注册表登录()
{
Login.TextChange+=Login\u TextChange;
}
私有无效登录\u文本更改(字符串newText)
{
this.BeginInvoke(()=>label.text=newText);
}
}
公共类登录
{
公共静态事件行为变化;
私有静态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);
}
}