2009-03-12 26 views
8

C# iş parçacığı iş parçacığını nasıl temizlersiniz?C# iş parçacığı denetimini temizleme

Bu iyi çalışır, sonra ortaya çıkan asıl geri ana iş parçacığı

AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal); 

için kopyalar bir

Membership.ValidateUser(username, password); 

yapan bir arka plan iş parçacığı vardır. Ancak, eğer oturumu kapatırsam, müdürü temizlemek istiyorum, eğer onu null olarak ayarlarsam hiçbir şey yapmaz Thread.CurrentPrincipal = null; Ben denemek ve onu

AppDomain.CurrentDomain.SetThreadPrincipal(Thread.CurrentPrincipal); 

aracılığıyla tekrar ayarlarsanız ben hatayı

Default principal object cannot be set twice. 

Herhangi fikir edinmek?

cevap

3

bu çözmek için hile ayarlayın tamamladığınızda

bir cephe temelini oluşturmaz ve konuya o atamak oldu. Ardından, mevcut kullanıcıyı yenisi için değiştirebilirsiniz.

3

AppDomain'i kapatmadan ve yeniden oluşturmadan yöneticiyi sıfırlayabileceğinizi sanmıyorum. SetThreadPrincipal'ı çağırırken sadece bir şansınız var.

ValidateUser'den sonra oluşturduğunuz kendi özel ana nesnesini kullandığınızı varsayarsak; muhtemelen kendi iç durumunu kimliği doğrulanmamış bir kullanıcıya sıfırlayan ana makinenize "Çıkış" yöntemi koyabilirsiniz.

+0

Bu durum iyi olabilir. Ben birkaç kez dispatcher iş parçacığına member.validateuser çağırırsanız, hiçbir sorunum yok, her zaman sadece başka bir asıl yazar. Belki yanlış anı güncelleştirmeye çalışıyorum. ValidateUser'in hangi güncellemesini güncellediği hakkında bir fikriniz var mı? – gimpy

+0

evet, yalnızca SetThreadPrincipal yöntemine bir çağrı alırsınız – TheZenker

3

Yalnızca ana iş parçacığınızın yöneticisini ayarlamak istediğinizde, arka plan iş parçacığı boyunca bir başvuru geçirin ve daha sonra CurrentPrincipal özelliğini kullanarak yöneticiyi ayarlayın.

örn. mainThead.CurrentPrincipal = Thread.CurrentPrincipal. Özgün anapara

İlgili konular