C# 清除列表框

C# 清除列表框,c#,multithreading,listbox,C#,Multithreading,Listbox,我正在做一个聊天程序。聊天有效。客户端的GUI有1个文本区域显示所有聊天信息,1个文本字段和1个按钮发送消息,1个列表框包含所有与服务器实际连接的客户端名称。 如果一个客户端已连接到服务器,服务器将发送一个特定代码,该代码调用客户端上的“requestClientnamelist()”-方法,该方法从服务器请求实际的clientnamelist,并将该列表放入其列表框中 这是我的问题: 在我用实际的clientnamelist重新填充列表框之前,我想先清除这个列表框,这样我就不会在这个列表框中有

我正在做一个聊天程序。聊天有效。客户端的GUI有1个文本区域显示所有聊天信息,1个文本字段和1个按钮发送消息,1个列表框包含所有与服务器实际连接的客户端名称。 如果一个客户端已连接到服务器,服务器将发送一个特定代码,该代码调用客户端上的“requestClientnamelist()”-方法,该方法从服务器请求实际的clientnamelist,并将该列表放入其列表框中

这是我的问题: 在我用实际的clientnamelist重新填充列表框之前,我想先清除这个列表框,这样我就不会在这个列表框中有两个名字。但是listbox1.Clear()方法不会清除任何内容!列表框的填充工作正常,但旧clientnamelist的清除工作不正常

这是我的代码(这段代码是从另一个线程(不是GUI线程!)调用的):

//在大型机中清除并重新填充Clientnamelist
试一试{
mainframe.Invoke((操作)委托{
mainframe.listBox1.Items.Clear();
对于(int i=0;i
是的。。。您必须调用/开始调用列表框操作:(

我正在使用此委托函数从其他线程访问主UI控件。它是一个可以重用的委托函数

private delegate void InvokeAction();
        private void DoUI(InvokeAction call)
        {
            if (IsDisposed)
            {
                return;
            }
            if (InvokeRequired)
            {
                try
                {
                    Invoke(call);
                }
                catch (InvalidOperationException)
                {
                    //Alert?
                }
            }
            else
            {
                call();
            }
        }
你可以这样叫豆豆

        DoUI(() =>
        {
             mainframe.listBox1.Items.Clear();
        });
因此,您能否尝试一下(清除listbox上的委托并添加listbox项),看看它是否解决了您的问题?(它应该可以在listbox上工作,因为上述委托的参考页“也使用ListBox1作为示例(由GvS提供)”

试试看{
豆豉(()=>
{
mainframe.listBox1.Items.Clear();
});
对于(int i=0;i
{
mainframe.listBox1.Items.Add(client.clientnameList[i]);
});
}
}捕获(ObjectDisposedException e){
控制台写入线(如StackTrace);
}

我的startpost中的代码已经在运行。我的错误是忘记清除client.clientnameList。
很抱歉!

FYI:您可以调用
Console.WriteLine(e)
,它将生成更详细的输出。为什么只捕获ObjectDisposedException?The.Clear()应该行得通,如果你看到两个名字,那就去寻找另一段代码来填充你的列表框。我已经在我的startpost中这样做了?!我很困惑,你有一段关于你确切意思的代码片段吗?
        DoUI(() =>
        {
             mainframe.listBox1.Items.Clear();
        });
        try {
                    DoUI(() =>
                    {
                        mainframe.listBox1.Items.Clear();
                    });
                    for (int i = 0; i < client.clientnameList.Count; i++) {
                        DoUI(() =>
                        {
                            mainframe.listBox1.Items.Add(client.clientnameList[i]);
                        });
                    }
            } catch (ObjectDisposedException e) {
                    Console.WriteLine(e.StackTrace);
            }