Не совсем понятно, что вы хотите сделать.
Не очень хорошая идея, чтобы заснуть в главном потоке приложений.Это сделает ваше приложение невосприимчивым ко всем сообщениям Windows (как исходящим от пользователя, так и самой Windows).Ваши пользователи заполнят его повешенным.
Если вам нужно отключить только эту кнопку, вы можете установить для ее свойства IsEnabled
значение false
, пользователь не сможет щелкнуть ее.
Если вы хотите отключить все события, вы можете использовать свойство IsEnabled
самого окна.
Если отключить все элементы управления (или только одну кнопку), нетэто не правильное решение для вас, тогда вы можете использовать одно из следующих действий:
Добавить переменную state (или простой флаг).Во всех ваших обработчиках событий вы будете проверять, является ли эта переменная истинной или нет (вы измените ее с помощью таймера).Что-то вроде:
if (!_canHandleMouseClicks)
return false;
Отключить все кнопки и повторно включить их через некоторое время:
private static IEnumerable<Button> FindAllButtons(DependencyObject obj)
{
if (obj == null)
return null;
int childrenCount = VisualTreeHelper.GetChildrenCount(obj);
for (int i = 0; i < childrenCount; ++i)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is Button)
yield return (Button)child;
// If you may have buttons inside buttons then uncomment these lines
//foreach (Button childOfChild in FindAllButtons(child))
// yield return childOfChild;
}
}
Затем вы можете написать:
foreach (Button button in FindAllButtons(window))
button.IsEnabled = false; // true to re-enable