Поскольку в сообщении есть поле 'from', проблем не должно быть, вы можете разделить свои сообщения по этому полю и затем сохранить где-нибудь коллекцию всех ваших чатов, например ::10000
Dictionary<string, ChatWindow> chatWindows = new Dictionary<string, ChatWindow>();
...
public void ProcessMessage(Message message)
{
ChatWindow chatWindow;
if(!chatWindows.TryGetValue(message.From, out chatWindow))
{
chatWindow = new ChatWindow();
chatWindows[message.From] = chatWindow;
}
chatWindow.AddMessage(message);
}
Это просто какой-то псевдокод, но я надеюсь, что вы поняли идею.