从另一个线程插入到listview中

时间:2012-04-06 17:41:03

标签: c# listview invoke

我正在尝试将另一个线程的电子邮件插入到Form1列表视图中,但不知何故它不起作用。这是我的代码:

    private delegate void InsertIntoListDelegate(string email);
    private void InsertIntoList(string email)
    {
        if (f1.listView1.InvokeRequired)
        {
            f1.listView1.Invoke(new InsertIntoListDelegate(InsertIntoList), email);
        }
        else
        {
            f1.listView1.Items.Add(email);
            f1.listView1.Refresh();
        }
    }

如果你能帮助我,那么谢谢你。

1 个答案:

答案 0 :(得分:2)

试试这个:

    private delegate void InsertIntoListDelegate(string email);
    public void InsertIntoList(string email)
    {
        if(InvokeRequired)
        {
            Invoke(new InsertIntoListDelegate(InsertIntoList), email);
        }
        else
        {
            f1.listView1.Items.Add(email);
            f1.listView1.Refresh();
        }
    }

InsertIntoList 是封闭控件的成员,因此应该在该控件上调用而不是列表视图。

尝试这个非常简单的测试,对我有用:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private delegate void InsertIntoListDelegate(string email);

    public void InsertIntoList(string email)
    {
        if(InvokeRequired)
        {
            Invoke(new InsertIntoListDelegate(InsertIntoList), email);
        }
        else
        {
            listView1.Items.Add(email);
        }
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        Task.Factory.StartNew(() => InsertIntoList("test"));
    }
}