현재 IRC 봇/클라이언트를 작성 중이며 작은 문제가 발생했습니다. 모든 채널은 고유 한 컨트롤 세트가있는 별도의 창에 표시됩니다. 창에 적절하게 편집 된 메시지를 보내는 별도의 스레드가 (있어야하는데) 때문에,생성자가 완료된 직후에 Windows Form이 사라짐
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
}
나는 ConcurrentDictionary<string, ChanWindow>
에서 윈도우 객체를 포함하고 있습니다 : 나는 적절한 창 클래스의 ChanWindow을 만들었습니다. 그들은 모든 루프 초기화됩니다 Chanlist
가 가입 채널의 List<string>
foreach (string chan in Chanlist)
{
Chans[chan] = new ChanWindow(chan, Name, this);
Chans[chan].Show();
}
입니다. 프로그램이 시작된 직후에 창문이 죽는 것을 목격 한 후, ChanWindow 생성자의 Username = uname;
줄에 중단 점을 넣었으며 창이 사라지기 직전에 중단 된 것으로 나타났습니다.
내 주요 질문은 : 원인은 무엇이며 어떻게 피할 수 있습니까? 사전을 사용하는 것이 좋은 생각입니까? 창 기능을 처리 할 수있는 일종의 래퍼/컨테이너 클래스를 빌드해야합니까?
메인을 제외한 모든 스레드가 UI에 씁니까? –
내가 틀렸다고 말하지만'Channs [chan] .Show()'같은 것을 할 필요가 없습니까? –
@DanPichelman 아무 일도 일어나기 전에 창문이 죽은 이후로 그렇게 할 기회가 없지만 나는 계획을 세웠다. –