我在主窗体上有Listbox,我想在第二个线程中调用方法来访问listbox。 代码:
class SecThreadOp
{
public Thread thr1;
private ListBox listb1= new ListBox();
public SecThreadOp(ListBox lb)
{
thr1 = new Thread(write);
listb1 = lb;
}
public void write()
{
if (listb1.InvokeRequired)
{
listb1.Invoke(new Action(write));
}
else
{
for (int i = 0; i < 20; i++)
{
listb1.Items.Add("testing");
Thread.Sleep(2000);
}
}
}
}
以主要形式获得:
.........
SecThreadOp sc;
.........
sc = new SecThreadOp(this.listBox1);
.........
private void button1_Click(object sender, EventArgs e)
{
sc.thr1.Start();
}
应用程序在单击按钮后暂停,但我想在列表框中显示“test”async。
由于
答案 0 :(得分:1)
看起来你只是在后台线程中重新调用write()。在您的Invoke中,我假设您要更新UI线程上的ListBox
。做这样的事情:
listb1.Invoke((MethodInvoker)delegate { listb1.Items.Add("testing"); });