2016-03-23 22 views
0

Bir kullanıcı TextBox içine bir şey girinceye kadar kodumun yürütülmesini engellemem gerekiyor. Bununla birlikte, bu özel durumda, aslında "kullanıcı yazmayı bitirinceye kadar" beklemem gerekecek. Yani, sadece ilk kez TextChanged olayının patlamasını beklemek istemiyorum, en son çalıştığım zamandan beri en az 500 msn geçene kadar beklemek istiyorum."Son" olayın tetiklenmesini bekleyin

Şu anda zamanlayıcıları kullanan bir şey var, her zaman TextChanged olay zamanlayıcı yeniden başlatıldığında ve zamanlayıcı Tick olay patlarsa, kullanıcının "yazmayı bitirdi" anlamına gelir. Orada var

  • Ben yürütülmesine engellemek için gerek yoktu Şimdiye kadar bu
  • için Timer kullanmaktan daha iyi/daha temiz bir yol olarak:

    şu anda bile bu yaklaşımla üç ana sorunlar var kullanıcı "yazmayı bitirdi" kadar temelde sadece kodumu Tick olay işleyicisine ekliyordum, ancak bu değişmedi.

  • Bir zaman aşımı da ayarlamalıyım, böylece kullanıcı belirli bir süre yazmayı bitirmemişse, kullanıcı için beklemediği için yönteme geri dönmelidir.

Bunu nasıl yapabilirim?

+0

Bu, en iyi yol olabilir ... zamanlayıcıyı sıfırlama ve karar verdiğiniz zamanın x değerini yazmanızın ardından kullanıcının yazmayı tamamladığını belirten kodunuzu tetikleme. Ya da kodu kontrol için "Ayrılma" etkinliğine koyabilir ve kodunuzu çalıştırmak için bu sekmeden çıkabilirsiniz, ancak bu, sizin kullanacağınız kullanıcı deneyimi olmayabilir. –

cevap

2

Bu, ReactiveUI'u kullanarak çok kolaydır. Ana sayfadaki örneğe bakın. Daha sonra ya da tam olarak ne yapıyorsun.

.Net için Reactive Extensions (RX) tabanlıdır ve bu gibi şeyler yapmak için yazılmıştır. ReactiveUI kullanmak bir seçenek değilse, RX'e ve ReactiveUI'nin bunu nasıl uyguladığına bakmanızı öneririm.

+0

Durumumda bunun nasıl çalışacağına dair bir örnek verebilir misiniz? Ayrıca, saygınlık için sayfalarındaki örnek değişebilir. – cogumel0

+0

İyi nokta. Sadece cep telefonum burada var, bu yüzden düzenleme seçeneklerim sınırlıdır. Örnekteki son kod bloğu değişen bir değeri dinler ve bir komutu tetiklemeden önce bir saniye bekler. Benzer bir şey yapmak için görünüm modelinizdeki bir değeri TextChanged olayından değiştirmek kolay olmalıdır. –

+0

Ayrıca ReactiveUI'ye güvenmeyen bazı cevapları da memnuniyetle karşılıyoruz. Henüz bakmadığım ve bu bir seçenek olup olmadığından emin olmadığım bir şey. – cogumel0