Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 29278|Yanıt: 2

[Kaynak] .net/c# Thread thread Askıya Alma ve Devam Eden Eski çözümler

[Bağlantıyı kopyala]
Yayınlandı 17.05.2018 09:36:10 | | | |
Thread.Suspend kullanımdan kaldırıldı.  Lütfen System.Threading'deki Monitor, Mutex, Event ve Semaphore gibi diğer sınıfları kullanarak Threads'i senkronize edin veya kaynakları koruyun.  Bağlantı girişi görünür.
Thread.Resume kullanımdan kaldırıldı.  Lütfen System.Threading'deki Monitor, Mutex, Event ve Semaphore gibi diğer sınıfları kullanarak Threads'i senkronize edin veya kaynakları koruyun.  Bağlantı girişi görünür.
Başlık duraklamak veya devam etmek isterse, daha önce Askıya Alma ve Devam yöntemini kullandım ve bu iki yöntemi başlığı çalıştırmak için kullandım, ki bu aslında sorunluydu ve o zamanlar umursamıyordum, o yüzden bugün alıp inceleyelim!

Yukarıdaki iki yöntemi iplikleri askıya almak ve devam ettirmek için kullanmanın sorunu nedir?

Örneğin, iş parçacığını askıya almak için Askıya Yöntemi çağırırsak ve hemen Askıya Devam Yöntemini çağırıp askıya alınan iş parçacığına devam edersek bir sorun olabilir.

Çünkü iş parçacığını askıya almak için Askıya Alma yöntemini çağırdıktan sonra, iş başlığı hemen askıya alınmayabilir, burada işlem süresi gerekiyor, bu sırada hemen Resume yöntemini çağırıp askıya alınan iş parçacığına devam edersiniz ve program hemen donur!

Microsoft'un açıklaması şudur:


İş parçacığını senkronize etmek için Suspend ve Resume yöntemlerini kullanmayın. İş parçacılığını durdurduğunuzda kodun ne olduğunu bilmenin bir yolu var mı? Güvenlik ayrıcalığı değerlendirmesi sırasında kilit tutarsanız, AppDomain'deki askıya alınmış iş parçacığındaki diğer iş parçacıkları engellenebilir. Sınıf oluşturucuyu çalıştırırken AppDomain'deki diğer iş parçacıklarını askıya alırsanız, sınıfı kullanma girişimleri engellenir. Çıkmazlar kolayca meydana gelebilir.

//
        Özet:
        Askıya alınan ipliği devam ettirin.
        //
        Anomali:
        T:System.Threading.ThreadStateException:
        İş başlığı başlatılmadı, ölü veya bekleme halinde değil.
        //
        T:System.Security.SecurityException:
        Arayan kişi doğru System.Security.Permissions.SecurityPermission dosyasına sahip değildir.
        [Modası geçmiş("Thread.Resume kullanımdan kaldırıldı.  Lütfen System.Threading'deki Monitor, Mutex, Event ve Semaphore gibi diğer sınıfları kullanarak Threads'i senkronize edin veya kaynakları koruyun.  Bağlantı girişi görünür.", yanlış)]
        [GüvenlikGüvenliKritik]
        kamu boşluğu Özgeçmiş();

Bu sorunu nasıl çözebilirim?



ManualResetEvent sınıfı

Bir veya daha fazla bekleyen iş parçacığına bir olayın gerçekleştiğini bildirin. Bu tür tipler miras alınamaz.


Test kodu şu şekildedir:








Önceki:C# cep telefonlarına metin mesajları gönderir
Önümüzdeki:SQL verilerden boşlukları kaldırır
 Ev sahibi| Yayınlandı 17.05.2018 21:14:51 |
_event. Set(); konuyu devam ettirmekdir.
_event. Reset(); ipliği askıya almaktır
 Ev sahibi| Yayınlandı 29.05.2018 14:58:49 |
Mevcut iş başlığının kimliğini alırsanız, şunları kullanın:

Thread.CurrentThread.ManagedThreadId.ToString() (önerilir)
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com