2011-02-01 22 views
6

UI'nin uzun bir işlem yapana kadar yenilenmesine izin verirken kodumu engellemek için Dispatcher.PushFrame kullanıyorum. Dispatcher.PushFrame çağrısı bir düğme tıklatma olayından beklediğim sürece bu beklendiği gibi çalışır. Ancak, aynı kodu Sayfa Yüklenmiş olay veya yapıcı sırasında kullanırsam, kullanıcı arabirimi yenilenmez ve bu nedenle hiçbir zaman boyamaz. Rastgele bir deneme olarak, Window.ShowDialog'u yapıcıdan kullanmayı denedim ve modal iletişim kutusu kapanana kadar denetim engellenmiş olsa bile, UI'nin boyamasına izin veriyor. Bu işlevselliğe Dispatcher.PushFrame veya başka bir manuel mekanizma kullanarak Page Loaded olayından izin vermek için herhangi bir çözüm önerilebilir mi?WPF sayfasında Dispatcher.PushFrame stili işlem engelleme konusunda yardıma ihtiyacınız var

Ek olarak, penceremi en aza indirir veya büyütürsem, kullanıcı arabirimi boyalar ve ben normal olarak onunla etkileşim kurabilirim, ancak yeniden boyutlandırmayı el ile yapana kadar değil.

+0

Eğer birisi umursuyorsa, [msdn forums] 'da bu soru hakkında daha fazla bilgi var (http://social.msdn.microsoft.com/Forums/en/wpf/thread/e2c85fa9-09c2-4eb1-bdd7 -78d8f2d6aaf3). (Hatta orada cevaplanmış olarak işaretlenmiş ...) –

+0

@ user598946, sorunuz gerçekten MSDN forumlarında yanıtlandı. Bu cevapta net olmayan bir şey var mı? –

cevap

3

MSDN'teki okumalarımdan Object Lifetime Events numaralı telefondan ve Reflektörde güldükten sonra Loaded ve Unloaded olaylarının diğer olaylarla aynı şekilde kaldırılmadığı anlaşılıyor. İçinde BroadcastEventHelper sınıfı kullanılır; bunlar, DispatcherPriority.Loaded seviyesinde görüntülemeden önce görsel ağacındaki her elemanın çeşitli Loaded olaylarını koordine eder.

Bu davranışı görmenizin nedeni budur.

Somut bir çözüm olarak, uzun çalışma görevlerinin Page.Loaded olay işleyicisine yerleştirilmemesini ve çalışmayı tamamlamak için bir BackgroundWorker veya Task verilmesini öneririm.

İlgili konular