Yalnızca bir iş parçacığına engelleme olmayan erişimi uygulayan aşağıdaki işlevi göz önünde bulundurun. BuradaMonitor.TryEnter kullanma ve kilitleme nesnesiyle ilgili soru
public bool TryCancelGroup()
{
if (Monitor.TryEnter(_locked))
{
if (_locked == false)
{
_locked = true;
try
{
// do something
}
catch (Exception ex)
{
_locked = false;
}
finally
{
Monitor.Exit(_locked);
}
}
return _locked;
}
else
{
return false;
}
}
Ve _locked
değişken tanımlanır nasıl. Program Monitor.Exit(_locked);
ulaştığında
bool _locked = false;
Şimdi önce eşitlenmedi değişkeni _locked bir System.Threading.SynchronizationLockException
deyişi atar. Ben bu istisna başlarken boolean bayrak olarak kullanmak amacıyla bool için bunu değiştiğinde
Tüm değişkeni _locked zaman önce çalışan nesne
object _locked = new object();
olarak tanımlandı edildi.
JaredPar sorununuza için çare olmuştur. Fakat mantığınız hatalı görünüyor - eğer ekrana _locked = true ile girerseniz monitörden asla çıkmayacaksınız. – VinayC
Kesinlikle evet, teşekkürler VinayC –
Ayrıca, genellikle kilit olarak statik bir nesneye sahip olduğunuzu düşünüyorum. – Chris