Rapor Modunda Liste Görünümü olan bir Windows Formum var. Görünümdeki her öğe için, uzun süreli bir işlem yapmam gerekiyor, bunun sonucu bir sayı.MsgWaitForMultipleObjects C# eşdeğeri nedir?
Yerel win32'de yapmamın yolu, her öğe için bir işçi iş parçacığı oluşturmaktır (naif; tabii ki, sınırlı sayıda iş parçacığı oluşturmayacağım) ve daha sonra iş parçacığı iş parçacığı dizisinde MsgWaitForMultipleObjects(). Her hesaplama bittiğinde, iş parçacığı sinyali ve ana UI iş parçacığı uyanır ve güncelleştirilir. Bu arada, UI iş parçacığı yanıt vermeye devam etmek için iletileri pompalarız.
Bu, C# 'da nasıl çalışabileceğine dair bir örnek verebilir mi? Monitor nesnesine baktım ve istediğim gibi görünmüyor - ya da engelleme sırasında iletileri pompalıyor mu?
Teşekkürler.
Düzenleme: Görünüşe göre WaitHandler.WaitAny() aslında iletileri pompalayabilir. CLR'deki mesaj pompalamada bkz. cbrumme's treatise.
Haklısınız, Monitör mesajları pompalamıyor. WaitHandle, bakmak için daha iyi bir yer olabilir, ancak iletileri de pompalayan bir WaitHandle yöntemi bulamadım. – itowlson
Evet, onu da gördüm. Birden fazla nesneyi bekleyebilmem şart değil. Tek bir olay ya da bir şey için bekleyeceğim ... UI'yi engellemek istemiyorum. Bulduğum tüm örnekler uykuyu (100) veya bağlam anahtarını zorlamak için bir şey yapıyor, bu çok üzücü. –
Sorun şu ki, WinForms'ta mesaj döngüsü açık değil. Yani doğrudan bir MsgWaitX yapamazsınız, bunun yerine bir etkinliği başlatacak bir şeye ihtiyacınız var. Örneğin, her alt görevi bir BackgroundWorker olarak çalıştırın (ve eşitleme ilkellerini unutun). – itowlson