這是一個非常糟糕的代碼方式。即使在winforms中。
首先,如果你在WPF工作,你真的需要了解The WPF Mentality。
在MVVM WPF中,您的ViewModel
應該控制應用程序在對用戶輸入做出反應時執行的操作。
一般來說,這是你如何應對「等待用戶在WPF一個ListBox
選擇項目:
XAML:
<ListBox ItemsSource="{Binding SomeCollection}"
SelectedItem="{Binding SelectedItem}"/>
視圖模型:
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
}
}
請注意,這與循環方法有何根本不同。
沒有必要「循環」任何東西,因爲WPF(以及winforms)已經有一個內部的「消息循環」,用於監聽用戶輸入並在需要時引發事件。
我建議你閱讀上面的鏈接答案和相關的博客文章,瞭解你需要從傳統的,程序化的Winforms方法轉變爲基於DataBinding的WPF思路。
你還在等什麼阻止用戶界面?什麼阻止了用戶界面 –
'DoEvents()'是邪惡的。即使在winforms中。發佈保持執行並阻止UI線程的相關代碼。 –