winforms中的异步方法不起作用

时间:2014-01-15 19:51:58

标签: c# winforms listbox

我在主窗体上有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。

由于

1 个答案:

答案 0 :(得分:1)

看起来你只是在后台线程中重新调用write()。在您的Invoke中,我假设您要更新UI线程上的ListBox。做这样的事情:

 listb1.Invoke((MethodInvoker)delegate {  listb1.Items.Add("testing"); });