我有一种seleniumCode()
使用 Selenium 的“chromedriver”做一些事情的方法。此方法通过单击 de GUI 上的按钮调用,该按钮使用执行的主线程。当此方法运行时,GUI 被“阻塞”,因为主线程被 seleniumCode() 折叠。为了使这项工作正常进行,我这样调用 seleniumCode() :
Thread th = new Thread(new ThreadStart(seleniumCode));
th.Start();
这就是问题所在:我在 seleniumCode() 中调用了 'writeLbx("each string")'。而且我不能在 ListBox 上写,因为它来自另一个线程。所以,经过 2 周的脑筋急转弯,我来到了这里。
我选择了你的一些代码来做这个:
private void writeLbx(string s)
{
switch (s)
{
case "Empezando_Tracking": lbxProcess.Items.Add("xxx");
break;
case "Mi Cuenta": lbxProcess.Items.Add("xxx");
break;
case "Email_Pass": lbxProcess.Items.Add("xxx");
break;
case "Iniciar sesión": lbxProcess.Items.Add("xxx");
break;
case "Procesando_Intento": lbxProcess.Items.Add("xxx");
break;
case "Precio_OK": lbxProcess.Items.Add("xxx");
break;
case "Poner_Cantidad": lbxProcess.Items.Add("xxx");
break;
}
lbxProcess.Update();
lbxProcess.TopIndex = lbxProcess.Items.Count - 1;
}
...进入这个:
private void writeLbx(string s)
{
this.Invoke(new Action(() =>
{
switch (s)
{
case "Empezando_Tracking": lbxProcess.Items.Add("xxx");
break;
case "Mi Cuenta": lbxProcess.Items.Add("xxx");
break;
case "Email_Pass": lbxProcess.Items.Add("xxx");
break;
case "Iniciar sesión": lbxProcess.Items.Add("xxx");
break;
case "Procesando_Intento": lbxProcess.Items.Add("xxx");
break;
case "Precio_OK": lbxProcess.Items.Add("xxx");
break;
case "Poner_Cantidad": lbxProcess.Items.Add("xxx");
break;
}
lbxProcess.Update();
lbxProcess.TopIndex = lbxProcess.Items.Count - 1;
}));
}
而这种简单的改变使我的代码可以像我想要的那样工作。