Ответ - да.
Но не так, как вы делаете это там.
Диспетчер begininvoke запустит ваше действие в потоке пользовательского интерфейса.
Этот поток - вещь, которая делает все, что связано с пользовательский интерфейс, хотя. Включая вещи, которые вы, вероятно, не хотите прерывать. Как отображение вашего нового персонажа.
Как правило.
Никогда не спите поток пользовательского интерфейса, потому что он замораживает пользовательский интерфейс.
В этом случае «другой» вызов не может ничего сделать, потому что вы записали поток, на котором пытаетесь его запустить. Первый из этих запусков, который запускается, - это то, что какое-то время будет что-то делать, и вы не увидите результаты до его завершения.
Я предлагаю вам удалить строки, имеющие:
System.Threading.Thread.Sleep(5);
Теперь не будет задержки, но ваш пользовательский интерфейс не будет заморожен.
Сделайте это действие асинхронным c .
Вставьте строку:
await Task.Delay(5);
Где был этот сон.
Как долго вы ожидали задержку?
Это 5 - 5 миллисекунд .
Может быть, вы хотите 500 или 5000.
Затем вы освобождаете эту нить, и у вас должна быть возможность вести себя больше, чем вы ожидали.
В зависимости от именно то, что вы пытаетесь сделать, лучше добавить список действий, в котором каждое действие меняет букву.
Затем вы можете выполнить итерацию по await task.delay, чтобы ввести задержку.