Если вы согласны с блокировкой вашего пользовательского интерфейса на время, необходимое для проверки на сервере, то при использовании DispatcherTimer все будет работать нормально.
Если проверка новых сообщений может занять больше временичем несколько миллисекунд, и вы хотите, чтобы ваш пользовательский интерфейс реагировал во время проверки, вы должны использовать несколько потоков.В этом случае, как только новые данные поступят, вы должны использовать Dispatcher.Invoke для их отображения.
Ваш код в потоке, который проверяет сообщения, может выглядеть следующим образом:
//try load new message from sever
RP message = PokecCmd.LoadRp();
//arived message
if( message != null )
Dispatcher.Invoke(DispatcherPriority.Send, new Action(() =>
{
//exist window
if (_chatWindows.ContainsKey(message.Nick))
{
_chatWindows[message.Nick].Show();
}
{
//create new Window
var chatWindow = new ChatWindow(PokecCmd, message);
_chatWindows.Add(message.Nick, chatWindow);
chatWindow.Show();
}
}
);