Кажется, у меня проблемы с многопоточностью.
Сначала позвольте мне объяснить, как создается приложение.
У меня есть класс, расширяющий ApplicationContext, который является моим основным классом для всегоприложение, в этом классе я загружаю новые окна, такие как окно входа в систему.
Затем каждое окно говорит назад и вперед с классом контекста приложения.
У меня есть метод, который используется для открытияновое окно сообщения, вот оно.
public void InitiateChat(RosterItem Roster)
{
MessageWindow MessageWindow;
if (WindowManager.ContainsKey(Roster.Jid.Bare) == false)
{
MessageWindow = new MessageWindow(Roster);
MessageWindow.FormClosing += new FormClosingEventHandler(MessageWindow_FormClosing);
//Store it.
WindowManager.Add(Roster.Jid.Bare, MessageWindow);
}
else
{
MessageWindow = WindowManager[Roster.Jid.Bare];
}
if (MessageWindow.InvokeRequired)
{
MessageWindow.BeginInvoke(new InitiateChatDelegate(InitiateChat), new Object[] { Roster });
return;
}
if (MessageWindow.WindowState == FormWindowState.Minimized)
{
MessageWindow.WindowState = FormWindowState.Normal;
}
MessageWindow.Show();
MessageWindow.Activate();
}
Теперь, когда я запускаю следующий код из события OnClick в главном окне мессенджера, он работает нормально:
RosterItem RosterItem = GetSelectedContact();
if (RosterItem != null)
{
Messenger.Bootload.MessengerApplication.Instnace.InitiateChat(RosterItem);
}
Окно работает отлично, но так как это приложение для обмена сообщениями, основанное на XMPP и agsXMPP, у меня есть событие, которое вызывается agsXMPP с именем OnMessage, которое отправляет мне уведомление о получении входящего сообщения.
Вот этот метод.*
public void ClientConnection_OnMessage(Object Sender, agsXMPP.protocol.client.Message Message)
{
//Load the contacts Window
RosterItem RosterItem = ContactManager[Message.From.Bare];
if (RosterItem != null)
{
InitiateChat(RosterItem);
}
}
Проблема в том, что когда выходит сообщение, я запускаю метод InitiateChat, но он зависает: (
Это MessageWindow.Show () tшляпы не могут работать нормально
Кто-нибудь может помочь мне заставить это работать, я пытаюсь сделать это в течение нескольких дней.