Soru WaitHandle ayarlanmış olup olmadığını nasıl kontrol edilir?


Benim bir WaitHandle ve WaitHandle'nin önceden ayarlanmış olup olmadığını nasıl kontrol edeceğimi bilmek istiyorum.

Not: Bir boole değişkeni ekleyebilirim ve Set () yöntemi kullanıldığında, değişkeni true olarak ayarlayın, ancak bu davranış bir yerde WaitHandle'da oluşturulmalıdır.

Yardım için teşekkürler!


32
2017-07-22 20:24


Menşei


Cevabım SwDevMan’dan çok daha açık olan ve dokümantasyon teklifini içeren bir kaç saniyeydi, bu yüzden siliyorum. Yine de merak ediyorum "Zaten sıfırlanmış bir otomatik sıfırlama olayı mı, yoksa test kodunun sıfırlanmaması mı gerekiyor?" - Ben Voigt


Cevaplar:


Deneyin WaitHandle.WaitOne (0)

MilisaniyeTimeout sıfır ise, yöntem engellemez. Bekleme işleminin durumunu sınar ve hemen döndürür.


47
2017-07-22 20:27



utanmış Teşekkürler! - Martin Vseticka
+1 İyi açık cevap. Güzel ve basit, "Kullan" için "Dene" değiştirmeyi önerebilirim. Bu haliyle, cevabınızdan emin değilsiniz. - Jeff Yates
Tek sorun, bazı WaitHandles'lar (otomatik sıfırlama olayı, semafor) için, hazır durum aslında bekleyerek sıfırlanacaktır. - Ben Voigt
@Vivin sevinç - millisecondsTimeout parametrenin adı WaitOne çağrı, lütfen bağlantıya bakın. Açıklama bölümünden alınmış bir alıntı - SwDevMan81


const int DoNotWait = 0;

ManualResetEvent waitHandle = new ManualResetEvent(false);                   

Console.WriteLine("Is set:{0}", waitHandle.WaitOne(DoNotWait));

waitHandle.Set(); 

Console.WriteLine("Is set:{0}", waitHandle.WaitOne(DoNotWait));   

Çıktı:

Ayarlandı: Yanlış

Ayarlandı: True


5
2017-07-22 20:30



Neden değişken için bir anahtar kelime kullanıyorsunuz? Gereksiz ve cevabınızı okumayı zorlaştırıyor. - Jeff Yates
@Jeff Sure, bazı örnek kodlar için isim vermek zor bir şey ve bugün çok kod yazıyordum. - Tim Lloyd
@chibacity: etkinlikten başka bir şey yazmak kolaydır. waitHandle, resetEvent, mre, myEvent. Liste sonsuzdur ve örneğini daha iyi yapar. - Jeff Yates
@Jeff Şu anda zihinsel tükenmişlik durumum hakkında hiçbir fikrin yok - ama ben uymayacağım! :) - Tim Lloyd
@chibacity: Ben sempati duyabiliyorum ama eğer bir iş yapmaya değerse, iyi yapmaya değer. +1 - Jeff Yates


Birini kullan Wait... üzerinde yöntemler WaitHandle gibi bir zaman aşımı değeri alır WaitOneve 0 zaman aşımına uğrar.


2
2017-07-22 20:28





Kullanabilirsiniz WaitOne (int milisaniyeTimeout, bool exitContext) yöntemini ve zaman aralığı için 0 değerini girin. Hemen geri dönecek.

bool isSet = yourWaitHandle.WaitOne(0, true);

1
2017-07-22 20:28



Neden birini kullanan birini kullanmalılar? exitContext değeri? Bu alanı gerektirmeyen alternatifler olduğu düşünüldüğünde, gerekliliğini açıklamanız gerekir. - Jeff Yates
VS2005 için çevrimiçi yardım sadece WaitOne (), WaitOne (int, bool) ve WaitOne (TimeSpan, bool) gösterir. Yani, WaitOne (int) bulamadılar - Lee Louviere