Winform Control.Refresh - garantili senkronize?

WinForms'ı Control.Refresh yöntemini çağırmak MSDN'de şöyle açıklanmaktadır:

Kontrole kendi müşteri alanını geçersiz kılmaya zorlar ve hemen kendini ve her çocuk kontrolünü yeniden çizer.

Ekli ekranın, bir Control.Refresh'in beklenen Control.OnPaint çağrısını üretmediği görüneceği, scanout sinyallerini (etkin bir şekilde değişen çözünürlük) değiştirdiği zaman ortaya çıkan kesintili bir sorunu ayırımcılıyorum. Ben daha fazla bilgi almak için uygulama enstrüman var, ancak ben aslında bu ekranın anlık boşalır algılar çünkü OnPaint çağırmak için karar çalışma zamanı olabilir eğer merak ediyorum.

Bu benim için pek olası görünmüyor ve başka bir sigara tüfeği bulacağımı umuyorum, ama başka birisinin bunu vahşi ortamda gördüğünü ve bu iş için bazı tavsiyelerde bulunma olasılığını bildiriyorum.

1

1 cevap

Hayır, garanti edilmez. Kumandada çizilecek bir ekran yoksa, boya mesajını ateşlemez.

Fakat kontrol tekrar ekranda olduğunda, boya mesajı tekrar ateş etmelidir.

Hata ayıklama bilgilerini boyamaya mı çalışıyorsunuz? Kontrol ekranda değilse, yenilendiğinizde ne olacağını bekliyorsunuz?

1
katma
@holtavolt Sadece emin olmak için denedim, ancak bir zamanlayıcı kontrol dışıysa, boya olayı ile farklı bir şey yapmaz. OnMove, elbette ama Boya yok.
katma yazar LarsTech, kaynak
@holtavolt Evet Yaparım ve OnPaint’i ateşlemiyor. Yapmaya çalıştığınız her ne olursa olsun, muhtemelen boya olayına mantık atmamalısınız.
katma yazar LarsTech, kaynak
@holtavolt Test amaçlı olarak, "geri" formunu ekrana taşımanız gerektiğini düşünmüyorum. İşte benim değişikliklerim: pastebin.com/qkw9gcvH .
katma yazar LarsTech, kaynak
Teşekkürler - Bunu denemek ve doğrulamak için birkaç deneme yaptım, ama bana çelişkili sonuçlar verdiler. OnMove'un konsola yazdığı ve bir Yenilemeyi tetiklediği basit bir form hazırladım. Anlattığınız gibi, bu ekran ekranda iken Refresh (ve OnPaint) ateşini görüyorum. Ekrandan çıkarırsam (sol üst ve sağ ok tuşlarını kullanarak) - Yenileme, formun bir kısmı ekrana tekrar gelene kadar ateşlemeyi durdurur. Ancak, bir Zamanlayıcı oluşturursam ve Ekranın soluna kaydırılacak şekilde Formun Konumunu değiştirirse, OnMove/OnPaint olaylarını alırım .
katma yazar holtavolt, kaynak
OnMove'unuz bir Yenileme() gerçekleştiriyor mu? Denetimin ekran dışında olsa bile, OnPaint'in çalışmasına neden oluyor.
katma yazar holtavolt, kaynak
Farklı ne yapıyoruz? Bu her zaman OnPaint'i tetikler: pastebin.com/Jc6hnVef - Boya etkinliği mantığına katılıyorum.
katma yazar holtavolt, kaynak
Kök nedeni, komut kalıplama uygulamamızla daha derin bir çerçeve sorunu olarak ortaya çıktı. Boyaya garanti verilmediğine dair ilk cevabınız doğru, bu şekilde işaretleniyor.
katma yazar holtavolt, kaynak