Это ужасно плохой способ кодирования. Даже в winforms.
Прежде всего, если вы работаете в WPF, вам действительно нужно понять The WPF Mentality.
в MVVM WPF, ваш ViewModel
должен контролировать действия, выполняемые приложением при реагировании на ввод пользователя.
Вообще говоря, это то, как вы имеете дело с «ждать пользователя, чтобы выбрать элемент в ListBox
в WPF:
XAML:
<ListBox ItemsSource="{Binding SomeCollection}"
SelectedItem="{Binding SelectedItem}"/>
ViewModel:
public class SomeViewModel
{
public ObservableCollection<SomeData> SomeCollection {get;set;}
//Methods to instantiate and populate the Collection.
private SomeData _selectedItem;
public SomeData SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
//PropertyChanged() is probably desired here.
UserHasSelectedAnItem(); //Method invocation
}
}
private void UserHasSelectedAnItem()
{
//Actions after the user has selected an item
}
}
Обратите внимание, что это принципиально отличается от подхода петли RefreshTheUIHack();
.
Нет необходимости «зацикливать» что-либо, потому что WPF (а также winforms) уже имеет внутренний «цикл сообщений», который прослушивает ввод пользователя и при необходимости создает события.
Предлагаю вам прочитать приведенный выше связанный ответ и связанные с ним сообщения в блоге, чтобы понять, что вам нужно, чтобы перейти от традиционного процедурного подхода winforms к менталитету WPF на основе DataBinding.
Что вы ждете от этого, блокируя пользовательский интерфейс? что блокирует пользовательский интерфейс –
'DoEvents()' is evil. даже в winforms. Отправьте соответствующий код, который продолжает выполнять и блокирует поток пользовательского интерфейса. –