Таймер, который вы используете, выполняется в потоке сообщений Windows. Поэтому во время опроса очередь сообщений Windows блокируется. Это не проблема с выполнением слишком большого объема обработки, большую часть времени поток будет ожидать ответа TCP / IP.
Чтобы это исправить, вам просто нужно выполнить работу в фоновом потоке, а затем обновить пользовательский интерфейс в потоке пользовательского интерфейса.
В .NET Framework есть куча разных таймеров, которые работают по-разному: тот, который вы используете, обрабатывает событие таймера в том же потоке, другие работают в фоновых потоках. Проверьте эту статью о различных таймерах .
Вы также можете просто использовать текущий таймер для вызова компонента BackgroundWorker для выполнения работы в фоновом потоке. Основным преимуществом этого является то, что BackgroundWorker будет выполнять работу в фоновом потоке, но будет вызывать событие завершения работы в потоке пользовательского интерфейса, чтобы было проще обновить пользовательский интерфейс, не беспокоясь о том, в каком потоке вы находитесь.