【发布时间】:2014-02-21 14:07:35
【问题描述】:
我正在开发一个聊天程序。聊天有效。客户端的 GUI 有 1 个文本区域来显示所有聊天消息、1 个文本字段和 1 个按钮来发送消息和 1 个列表框,其中包含与服务器实际连接的所有客户端名称。 如果一个客户端连接到服务器,服务器会发送一个特定的代码,该代码在客户端调用“requestClientnamelist()”方法,该方法从服务器请求实际的客户端名称列表并将此列表放入他的列表框中。
这是我的问题: 在我用实际的客户端名称列表重新填充列表框之前,我想先清除这个列表框,所以我在这个列表框中没有任何两次名称。但是 listbox1.Clear() 方法不会清除任何东西!列表框的填充工作,但旧的客户端名称列表的清除不起作用...
这是我的代码(此代码从不同的线程(不是 GUI 线程!)调用):
// Clear and refill Clientnamelist in mainframe
try {
mainframe.Invoke((Action)delegate {
mainframe.listBox1.Items.Clear();
for (int i = 0; i < client.clientnameList.Count; i++) {
mainframe.listBox1.Items.Add(client.clientnameList[i]);
}
});
} catch (ObjectDisposedException e) {
Console.WriteLine(e.StackTrace);
}
【问题讨论】:
-
仅供参考:您可以致电
Console.WriteLine(e),它会产生更详细的输出。 -
为什么只捕获 ObjectDisposedException?
-
The.Clear() 应该可以工作,如果您看到双重名称,然后去寻找另一段填充您的列表框的代码。
标签: c# multithreading listbox