WPF

2013-03-24 25 views
16

'da bir işlem yapmadan önce gecikme nasıl yapılır Bir sonraki pencereye geçmeden önce 2 saniyelik bir gecikme yapmak için aşağıdaki kodu kullanmayı denedim. Ancak iş parçacığı önce çağırıyor ve metin bloğu bir mikrosaniye için görüntüleniyor ve bir sonraki sayfaya indi. Bir memurun bunu yapacağını duydum.WPF

tbkLabel.Text = "two mins delay"; 
Thread.Sleep(2000); 
Page2 _page2 = new Page2(); 
_page2.Show(); 
+0

bir DispatcherTimer

tbkLabel.Text = "two seconds delay"; var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) }; timer.Start(); timer.Tick += (sender, args) => { timer.Stop(); var page = new Page2(); page.Show(); }; 

Yöntem 2 kullanımı Neden "iki ** dakika ** gecikme?" –

cevap

56

Thread.sleep çağrısı UI iş parçacığı engelliyorsa:

İşte benim pasajıdır. Zaman uyumsuz olarak beklemeniz gerekir.

Yöntem 1: Task.Delay

tbkLabel.Text = "two seconds delay"; 

Task.Delay(2000).ContinueWith(_ => 
    { 
    var page = new Page2(); 
    page.Show(); 
    } 
); 

Yöntem 3 kullanımı:/.NET 4.5 şekilde, kullanım uyumsuz bekliyor

// we need to add the async keyword to the method signature 
public async void TheEnclosingMethod() 
{ 
    tbkLabel.Text = "two seconds delay"; 

    await Task.Delay(2000); 
    var page = new Page2(); 
    page.Show(); 
} 
+0

Yöntem 1, zamanlayıcı birden çok kez işaretler ve uygulama ilkini çok yavaş işliyorsa, yeni sayfayı birden çok kez gösterebilir. – usr

+3

@usr Aslında olmaz. Dahili olarak, zamanlayıcı tek bir vuruştur ve Tick olayını yükselttikten sonra yeniden başlatılır. – Phil

+0

kim biliyordu? Ben yapmadım +1 – usr