Как сделать паузу в финале

Добавил пользователь Morpheus
Обновлено: 03.10.2024

На самом деле я попытался использовать Invoke, но, как вы знаете, мы не можем использовать его внутри класса для этой процедуры.

Вот мой код для более подробной информации:

Я тоже попробовал, но я не могу вернуть правильное значение. потому что в этой процедуре, если я буду использовать await, значение вернется до окончания ожидания.

А также я не хочу использовать Thread.Sleep , потому что он заблокирует пользовательский интерфейс. Спасибо за любую помощь.

ОТВЕТЫ

Ответ 1

Использовать функцию ожидания async:

Отметьте свой метод как асинхронный.

Добавьте Task.Delay(2000) в ожидаемую задачу.

Ответ 2

Запрос на downvotes:

DoEvents

Предупреждение: полное, полное и непростительное форматирование Barnyard:

Это будет работать. Нет ответственности, если люди указывают и смеются.

Ответ 3

Вы можете посмотреть вокруг Task.Delay() , он не будет блокировать текущий поток и продолжить выполнение после количества миллисекунд.

Использование Exmaple из msdn:

Или, может быть, посмотрите Timer класс.

Ответ 4

Я вижу, что он работает с событиями или задачами (если вы не можете использовать async/wait). Вот как создать событие. Мы можем использовать отдельный Thread , чтобы проверить, создан ли файл и событие пожара, если оно:

  • Пауза, которую вы хотели
  • Не блокирует поток пользовательского интерфейса.
  • Событийный подход (который является правильным способом решения таких проблем)

Ответ 5

Самое простое ожидание, сохраняя отзывчивость пользовательского интерфейса, - это использовать async-wait.

Чтобы сделать это, вы должны объявить свою функцию async и вернуть задачу вместо void и Task

Теперь, когда вы делаете что-то, что занимает некоторое время, используйте асинхронную версию функции для запуска процесса. Пока этот процесс запущен, вы можете делать другие вещи. Когда вам нужен результат, ожидайте выполнения задачи, и вы получите пустоту, если async вернет задачу или TResult, если async возвращает Task

  • Каждая функция, вызывающая асинхронную функцию, должна быть объявлена ​​как async
  • каждая функция async возвращает Задачу вместо void и Задачу
  • Есть только одно исключение: обработчик события может возвращать void.

Пример обработчика событий async:

Обратите внимание, что все обрабатывается потоком пользовательского интерфейса. Единственное различие заключается в том, что, как только происходит какое-то время, процесс не имеет ожиданного ожидания, но обрабатывает ввод пользовательского интерфейса.

Вышеописанное достаточно, чтобы ваш пользовательский интерфейс был отзывчивым. Вы сказали, что хотите знать, как подождать некоторое время. Из остальной части вашего вопроса я понимаю, что вы имели в виду: как прерывать процедуру, пока она чего-то ждет, поэтому пользовательский интерфейс может делать что-то другое. Если вам действительно нужно подождать некоторое время, сохраняя отзывчивость пользовательского интерфейса, используйте Task.Delay(TimeSpan).

Предположим, что на завтрак вам придется жарить хлеб и варить яйца. Для этого есть несколько сценариев:

  • Начните поджаривать хлеб. Подождите, пока он не будет завершен. Начните готовить яйца, дождитесь окончания. Синхронная обработка. Пока вы ждёте хлеб для тоста, вы ничего не можете сделать.
  • Начните поджаривать хлеб, а хлеб поджаривается, начинайте готовить яйца. когда яйца готовятся, подождите, пока хлеб не закончит поджаривание. Это называется асинхронным, но не параллельным. Это делается с помощью основного потока, и пока этот поток что-то делает, основной поток не может ничего сделать. Но пока он ждет, у него есть время, чтобы делать другие вещи (например, сделать чай).
  • Нанимайте поваров, чтобы поджарить хлеб и варить яйца. Подождите, пока оба не закончатся. Асинхронный и параллельный: работа выполняется разными потоками. Это самое дорогое, потому что вам нужно начинать новые потоки.

Наконец, заметка об обработке исключений

Вы заметили, что если возникает исключение, вы не отключите?. Правильный способ убедиться, что размыкание всегда вызывается, следующее:

Последняя часть всегда выполняется независимо от того, какое исключение выбрано или нет.

Ответ 6

Вы можете использовать простой пул потоков для архивирования. Однако ваше возвращение должно выполняться асинхронно, поэтому оно не блокирует gui.

Ответ 7

Вы должны использовать старый хороший фоновый поток (см. ответ, написанный FabJan), или вы можете использовать async и ждать с контекстом синхронизации:

Может показаться, что MessageBox done показывается до того, как ProgressBar находится на максимуме. Я обвиняю эту волшебную анимацию progressBar в Windows 8. Пожалуйста, поправьте меня, если я ошибаюсь.

Как набрать аккорд из разных длительностей (две четверти и восьмая + восьмая)? В разных слох не получается, потому что аккорд второй в такте, а сдвинуть курсор, не набирая паузу, нельзя. Может, можно скрыть паузу?

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

Favorite

В закладки

WhatsApp для iOS обновился до версии 22.2.75. Она привнесла несколько небольших, но важных изменений.

Во-вторых, появилась полноценная поддержка режима Фокусирование в iOS 15. То есть только определенные контакты смогут написать вам или позвонить в заглушенном режиме.

И последнее, но не менее важное нововведение: WhatsApp теперь отображает фотографию профиля пользователя в уведомлениях. [9to5]

Favorite

В закладки

Кто-то может пояснить, как установить паузу, к примеру, на шесть тактов?

Comments

Введите шесть тактов пауз и генерируйте части. Пауза в шесть тактов будет по частям.

Я хотел бы получить горизонтальную линию с циферкой 6 наверху.

Если у вас есть только один инструмент, нажмите m, чтобы получить его. Если имеется более одного инструмента, вы должны генерировать части или иметь паузы для всех инструментов.

Когда я нажимаю M, то пауза устанавливается не на выделенные такты, а на все такты. От начала до конца.
Установить, к примеру, 4 такта, у меня не получается.

Нажатие M превращает существующие такты с паузами в несколько пауз тактов. Введите свою песню, затем нажмите M в конце, и такты, которые должны быть мульти-тактовыми, сделают это автоматически. Вы не можете легко вводить больше заметок, когда у вас есть несколько точек отдыха.

Читайте также: