我目前正在编写一个 IRC 机器人/客户端,我偶然发现了一个小问题。每个通道都将显示在具有自己的一组控件的单独窗口中。我创建了一个合适的窗口类 ChanWindow:
public partial class ChanWindow : Form
{
string Chan;
string Username;
IRCBot Caller;
public ChanWindow(string channame, string uname, IRCBot caller)
{
Caller = caller;
Caller.Join(channame);
InitializeComponent();
Chan = channame;
Name = Chan;
Username = uname;
}
//various functionalities required for window use
}
我将窗口对象存储在 a 中ConcurrentDictionary<string, ChanWindow>
,因为(应该有)一个单独的线程将适当编辑的消息发送到窗口。它们都在循环中初始化:
foreach (string chan in Chanlist)
{
Chans[chan] = new ChanWindow(chan, Name, this);
Chans[chan].Show();
}
加入的频道Chanlist
在哪里。List<string>
目睹了程序启动后不久窗口就死了,我在Username = uname;
ChanWindow 构造函数的行中放置了一个断点,并注意到它在窗口死前立即被触发。
我的主要问题是:原因是什么,我该如何避免?使用字典是个好主意吗?我应该构建某种可以处理窗口功能的包装器/容器类吗?