<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF" Height="200" Width="300">
<StackPanel>
<Button x:Name="btnWithout" Click="btnWithout_Click">Without DoEvents</Button>
<Button x:Name="btnWith" Click="btnWith_Click">With DoEvents</Button>
<ListBox x:Name="listBox"/>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System.Windows;
using System.Windows.Threading;
namespace WpfApplication1
{
public partial class Window1 : Window
{
private delegate void EmptyDelegate();
public Window1()
{
InitializeComponent();
}
private void btnWithout_Click(object sender, RoutedEventArgs e)
{
LoadNumbers(false);
}
private void btnWith_Click(object sender, RoutedEventArgs e)
{
LoadNumbers(true);
}
private void LoadNumbers(bool callDoEvents)
{
listBox.Items.Clear();
btnWithout.IsEnabled = false;
btnWith.IsEnabled = false;
for(int i = 1; i <= 10000; i++)
{
listBox.Items.Add("Number " + i.ToString());
if(callDoEvents){
DoEvents();
}
}
btnWithout.IsEnabled = true;
btnWith.IsEnabled = true;
}
public static void DoEvents()
{
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background,new EmptyDelegate(delegate{}));
}
}
}
|