我正在开始新的主题:
Thread t = new Thread(UpdateListOutput);
t.IsBackground = true;
t.Start();
UpdateListOutput:
void UpdateListOutput()
{
while (true)
{
if (!string.IsNullOrEmpty(engineOutput))
{
OutputBox.Items.Add(engineOutput);
}
}
}
我发现错误:
跨线程操作无效:从a访问控制'OutputBox' 除了创建它的线程以外的线程。
我该如何运行?
答案 0 :(得分:13)
试试这个
this.Invoke((MethodInvoker)(() => OutputBox.Items.Add(engineOutput)));
答案 1 :(得分:0)
试试这个
void UpdateListOutput()
{
Dispatcher.BeginInvoke(new Action(() => {
while (true)
{
if (!string.IsNullOrEmpty(engineOutput))
{
OutputBox.Items.Add(engineOutput);
}
}
}));
}
答案 2 :(得分:-1)
我有一个方法 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;
}));
}
这个简单的改变让我的代码可以像我想要的那样工作。