簡體   English   中英

Winforms中的異步方法不起作用

[英]Async method in winforms doesn't works

我在主窗體上設置了列表框,我想在第二個線程中調用方法來訪問列表框。 碼:

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();
   }

單擊按鈕后應用程序掛起,但我想在列表框異步中顯示“測試”。

謝謝

看來您只是在后台線程中重新調用write()。 在您的Invoke中,假設您要更新UI線程上的ListBox 做這樣的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM