ThreadState Sabit listesi
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Threadyürütme durumlarını belirtir.
Bu sabit listesi, üyeleri için bit düzeyinde karşılaştırmayı destekler.
public enum class ThreadState
[System.Flags]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
public enum ThreadState
[System.Flags]
[System.Serializable]
public enum ThreadState
[System.Flags]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public enum ThreadState
[<System.Flags>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ThreadState =
[<System.Flags>]
[<System.Serializable>]
type ThreadState =
[<System.Flags>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ThreadState =
Public Enum ThreadState
- Devralma
- Öznitelikler
Alanlar
| Name | Değer | Description |
|---|---|---|
| Running | 0 | İş parçacığı başlatıldı ve henüz durdurulmadı. |
| StopRequested | 1 | İş parçacığının durdurulması isteniyor. Bu yalnızca dahili kullanım içindir. |
| SuspendRequested | 2 | İş parçacığının askıya alınması isteniyor. |
| Background | 4 | İş parçacığı, ön plan iş parçacığı yerine arka plan iş parçacığı olarak yürütülüyor. Bu durum özelliği ayarlanarak denetlenmektedir IsBackground . |
| Unstarted | 8 | Start() yöntemi iş parçacığında çağrılmıyor. |
| Stopped | 16 | İş parçacığı durduruldu. |
| WaitSleepJoin | 32 | İş parçacığı engellendi. Bu, veya çağrısının Sleep(Int32) veya Join()bir kilit istemenin (örneğin, veya çağırarak Enter(Object) ) Wait(Object, Int32, Boolean) veya gibi ManualResetEventbir iş parçacığı eşitleme nesnesini beklemenin sonucu olabilir. |
| Suspended | 64 | İş parçacığı askıya alındı. |
| AbortRequested | 128 | Abort(Object) yöntemi iş parçacığında çağrıldı, ancak iş parçacığı henüz onu sonlandırmaya çalışacak bekleyen ThreadAbortException öğesini almadı. |
| Aborted | 256 | İş parçacığı durumu içerir AbortRequested ve iş parçacığı artık ölüdür, ancak durumu henüz olarak Stoppeddeğişmemiştir. |
Açıklamalar
Numaralandırma, ThreadState iş parçacıkları için tüm olası yürütme durumlarının bir kümesini tanımlar. Yalnızca birkaç hata ayıklama senaryosunda ilgi çekicidir. Kodunuz hiçbir zaman iş parçacığının etkinliklerini eşitlemek için iş parçacığı durumunu kullanmamalıdır.
Bir iş parçacığı oluşturulduktan sonra, sonlandırılana kadar en az bir durumda olur. Ortak dil çalışma zamanı içinde oluşturulan iş parçacıkları başlangıçta Unstarted durumundayken, çalışma zamanına gelen dış veya yönetilmeyen iş parçacıkları zaten Running durumundadır. bir iş parçacığı çağrılarak Thread.Startdurumundan Running duruma geçirilirUnstarted. bir iş parçacığı çağrısının sonucu olarak durumundan Startayrıldıktan Unstarted sonra hiçbir zaman duruma geri dönemezUnstarted.
bir iş parçacığı belirli bir anda birden fazla durumda olabilir. Örneğin, bir iş parçacığı çağrısında Monitor.Waitengellenirse ve engellenen iş parçacığında başka bir iş parçacığı çağırırsaThread.Abort, engellenen iş parçacığı hem hem hem AbortRequested de WaitSleepJoin durumlarında aynı anda olur. Bu durumda, iş parçacığı çağrısından döner dönmez veya kesintiye Monitor.Wait uğrar kesilmez, durdurulmaya başlamak için alır ThreadAbortException . Değerlerin ThreadState tüm birleşimleri geçerli değildir; örneğin, bir iş parçacığı hem hem Unstarted de Aborted durumlarında olamaz.
Bir iş parçacığı durumundan Stopped asla ayrılamıyor.
Önemli
İki iş parçacığı durumu numaralandırması vardır: System.Threading.ThreadState ve System.Diagnostics.ThreadState.
Aşağıdaki tabloda, durum değişikliğine neden olan eylemler gösterilmektedir.
| Eylem | ThreadState |
|---|---|
| Ortak dil çalışma zamanı içinde bir iş parçacığı oluşturulur. | Unstarted |
| Başka bir iş parçacığı yeni iş parçacığında yöntemini çağırır Thread.Start ve çağrı döndürür. Yöntem, Start yeni iş parçacığı çalışmaya başlayana kadar döndürülmüyor. çağrısı Startsırasında yeni iş parçacığının hangi noktada çalışmaya başlayacağını bilmenin hiçbir yolu yoktur. |
Running |
| İş parçacığı çağrıları Sleep | WaitSleepJoin |
| İş parçacığı başka bir nesnede çağırır Monitor.Wait . | WaitSleepJoin |
| İş parçacığı başka bir iş parçacığında çağırır Join . | WaitSleepJoin |
| Başka bir iş parçacığı çağrısı Interrupt | Running |
| Başka bir iş parçacığı çağrısı Suspend | SuspendRequested |
| İş parçacığı bir Suspend isteğe yanıt verir. | Suspended |
| Başka bir iş parçacığı çağrısı Resume | Running |
| Başka bir iş parçacığı çağrısı Abort | AbortRequested |
| İş parçacığı bir Abort isteğe yanıt verir. | Stopped |
| bir iş parçacığı sonlandırıldı. | Stopped |
Yukarıda belirtilen durumlara ek olarak, iş parçacığının Background arka planda mı yoksa ön planda mı çalıştığını gösteren durum da vardır. Daha fazla bilgi için bkz. Ön Plan ve Arka Plan İş Parçacıkları.
bir Thread.ThreadState iş parçacığının özelliği, bir iş parçacığının geçerli durumunu sağlar. Uygulamaların bir iş parçacığının çalışıp çalışmadığını belirlemek için bit maskesi kullanması gerekir. değeri Running sıfır (0) olduğundan, aşağıdaki kodla bir iş parçacığının çalışıp çalışmadığını test edin:
(myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0
(myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0