Я отформатировал бы как это:
SELECT
column1,
column2
FROM
table1
WHERE
column3 IN (SELECT TOP(1)
column4
FROM
table2
INNER JOIN table3 ON table2.column1 = table3.column1)
или как это:
SELECT
column1,
column2
FROM
table1
WHERE
column3 IN (SELECT TOP(1) column4
FROM table2
INNER JOIN table3 ON table2.column1 = table3.column1)
Возможно, установить Enabled
на false
?
this.Enabled = false;
Это немного радикально, поскольку также предотвращает перемещение формы, изменение ее размера или закрытие события. Лучшим подходом было бы поместить элемент управления Panel
в вашу форму, который имеет Dock = Fill
, и поместить другие наши элементы управления в эту Panel
.
Другой возможный способ - «отфильтровать» весь ввод, поступающий в приложение. Это можно сделать, послушав «KeyDown» и «MouseButtonDown». После запуска фонового задания вы можете установить флаг FILTER_INPUT в значение true и сбросить его после завершения. Если установлен флаг FILTER_INPUT, то можно отменить все события клавиш и мыши.
Это может быть не самым эффективным, поскольку все нажатия клавиш и щелчки будут проходить через проверку фильтра.
Легче управлять отключением определенных элементов управления, помещая их внутри панели и отключая эту панель, а не отключая отдельные элементы управления:
controlPanel.Enabled = false;
Распространенный способ блокировки других задач, который может удовлетворить ваши потребности , показывает самую верхнюю форму с индикатором выполнения. Я успешно реализовал это в прошлом. Другие программы делают то же самое. Например, в WinRAR, когда приложение занято извлечением или сжатием файлов, приложение показывает самую верхнюю форму. Это выглядит как «модальная» форма, но на самом деле вы все равно можете щелкать другие функции, при этом WinRAR спрашивает: «Вы хотите прервать текущую операцию?»
Отключение всего приложения часто не является необходимым и может быть не интуитивно понятным. Итак, спросите себя, действительно ли вам нужно блокировать взаимодействие с формой. Например, У меня есть приложение, которое требует времени для выполнения определенных задач. Я предоставляю индикатор выполнения для этой конкретной части работы, но вы все равно можете взаимодействовать с приложением, чтобы запускать дополнительные задачи, которые выполняются одновременно. Даже если я разрешил вам выполнять только одну задачу за раз, вы все равно можете просмотреть файл справки или установить настройки приложения во время выполнения задачи. Кроме того, я даю пользователю кнопку, позволяющую остановить задачу. Отключение формы предотвратит этот тип взаимодействия.
вы по-прежнему можете просмотреть файл справки или настроить параметры приложения во время выполнения задачи. Кроме того, я даю пользователю кнопку, позволяющую остановить задачу. Отключение формы предотвратит этот тип взаимодействия. вы по-прежнему можете просмотреть файл справки или настроить параметры приложения во время выполнения задачи. Кроме того, я даю пользователю кнопку, позволяющую остановить задачу. Отключение формы предотвратит этот тип взаимодействия.Я согласен с @ michael-todd в его комментарии выше, отключив отдельные элементы управления / кнопки навигации и т. Д. пока фоновый рабочий работает, кажется довольно хорошим решением. Это даст вам детальный контроль над тем, что пользователь может делать во время определенной фоновой операции.
Вы можете:
Вы также можете создать модальное диалоговое окно «всплывающее окно занятости», которое отображается при запуске фоновой задачи и программно удаляется при завершении задачи. Вы также можете поместить небольшую анимацию в это поле, чтобы пользователи знали, что что-то происходит. Вам также необходимо убедиться, что они не закрывают диалоговое окно вручную (только позволяют закрывать его программно).