RegisteredWaitHandle Sınıf
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.
çağrılırken RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)kaydedilmiş bir tanıtıcıyı temsil eder. Bu sınıf devralınamaz.
public ref class RegisteredWaitHandle sealed : MarshalByRefObject
public ref class RegisteredWaitHandle sealed
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public sealed class RegisteredWaitHandle : MarshalByRefObject
public sealed class RegisteredWaitHandle
public sealed class RegisteredWaitHandle : MarshalByRefObject
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class RegisteredWaitHandle : MarshalByRefObject
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
type RegisteredWaitHandle = class
inherit MarshalByRefObject
type RegisteredWaitHandle = class
type RegisteredWaitHandle = class
inherit MarshalByRefObject
[<System.Runtime.InteropServices.ComVisible(true)>]
type RegisteredWaitHandle = class
inherit MarshalByRefObject
Public NotInheritable Class RegisteredWaitHandle
Inherits MarshalByRefObject
Public NotInheritable Class RegisteredWaitHandle
- Devralma
- Devralma
-
RegisteredWaitHandle
- Öznitelikler
Örnekler
Aşağıdaki örnekte, geri çağırma yönteminin neden çağrıldığını belirlemek için öğesinin nasıl kullanılacağı RegisteredWaitHandle ve bekleme tutamacı sinyalli olduğu için geri çağırma gerçekleştiğinde görevin kaydının nasıl kaldırıldığı gösterilmektedir.
Örnekte ayrıca, belirtilen bir bekleme tutamacı işaretlendiğinde belirtilen geri çağırma yöntemini yürütmek için yönteminin nasıl kullanılacağı RegisterWaitForSingleObject gösterilmektedir. Bu örnekte geri çağırma yöntemi şeklindedir WaitProcve bekleme tutamacı ise bir AutoResetEventşeklindedir.
Örnek, yürütürken geri çağırmaya geçirilen bilgileri tutmak için bir TaskInfo sınıf tanımlar. Örnek bir TaskInfo nesne oluşturur ve ona bazı dize verileri atar.
RegisteredWaitHandle yöntemi tarafından RegisterWaitForSingleObject döndürülen, geri çağırma yönteminin Handle öğesine erişebilmesi TaskInfo için RegisteredWaitHandlenesnesinin alanına atanır.
Yöntemine yapılan çağrıTaskInfo, geri çağırma yöntemine geçirilecek nesne olarak belirtmeye RegisterWaitForSingleObject ek olarak görevin bekleyeceğini, geri çağırma yöntemini temsil eden AutoResetEvent bir WaitOrTimerCallback temsilciyi, bir saniyelik zaman aşımı aralığını ve birden çok geri çağırmayı belirtirWaitProc.
Ana iş parçacığı yöntemini çağırarak AutoResetEvent öğesine işaret Set ettiğinde, WaitOrTimerCallback temsilci çağrılır.
WaitProc yöntemi, zaman aşımının oluşup oluşmadığını belirlemek için sınarRegisteredWaitHandle. Bekleme tutamacı işaretlendiği için geri çağırma çağrılırsa yöntemi, WaitProc ek geri çağırmaları RegisteredWaitHandledurdurarak kaydını iptal eder. Zaman aşımı durumunda görev beklemeye devam eder. yöntemi, WaitProc konsola bir ileti yazdırarak sona erer.
using System;
using System.Threading;
// TaskInfo contains data that will be passed to the callback
// method.
public class TaskInfo {
public RegisteredWaitHandle Handle = null;
public string OtherInfo = "default";
}
public class Example {
public static void Main(string[] args) {
// The main thread uses AutoResetEvent to signal the
// registered wait handle, which executes the callback
// method.
AutoResetEvent ev = new AutoResetEvent(false);
TaskInfo ti = new TaskInfo();
ti.OtherInfo = "First task";
// The TaskInfo for the task includes the registered wait
// handle returned by RegisterWaitForSingleObject. This
// allows the wait to be terminated when the object has
// been signaled once (see WaitProc).
ti.Handle = ThreadPool.RegisterWaitForSingleObject(
ev,
new WaitOrTimerCallback(WaitProc),
ti,
1000,
false
);
// The main thread waits three seconds, to demonstrate the
// time-outs on the queued thread, and then signals.
Thread.Sleep(3100);
Console.WriteLine("Main thread signals.");
ev.Set();
// The main thread sleeps, which should give the callback
// method time to execute. If you comment out this line, the
// program usually ends before the ThreadPool thread can execute.
Thread.Sleep(1000);
// If you start a thread yourself, you can wait for it to end
// by calling Thread.Join. This option is not available with
// thread pool threads.
}
// The callback method executes when the registered wait times out,
// or when the WaitHandle (in this case AutoResetEvent) is signaled.
// WaitProc unregisters the WaitHandle the first time the event is
// signaled.
public static void WaitProc(object state, bool timedOut) {
// The state object must be cast to the correct type, because the
// signature of the WaitOrTimerCallback delegate specifies type
// Object.
TaskInfo ti = (TaskInfo) state;
string cause = "TIMED OUT";
if (!timedOut) {
cause = "SIGNALED";
// If the callback method executes because the WaitHandle is
// signaled, stop future execution of the callback method
// by unregistering the WaitHandle.
if (ti.Handle != null)
ti.Handle.Unregister(null);
}
Console.WriteLine("WaitProc( {0} ) executes on thread {1}; cause = {2}.",
ti.OtherInfo,
Thread.CurrentThread.GetHashCode().ToString(),
cause
);
}
}
Imports System.Threading
' TaskInfo contains data that will be passed to the callback
' method.
Public Class TaskInfo
public Handle As RegisteredWaitHandle = Nothing
public OtherInfo As String = "default"
End Class
Public Class Example
<MTAThread> _
Public Shared Sub Main()
' The main thread uses AutoResetEvent to signal the
' registered wait handle, which executes the callback
' method.
Dim ev As New AutoResetEvent(false)
Dim ti As New TaskInfo()
ti.OtherInfo = "First task"
' The TaskInfo for the task includes the registered wait
' handle returned by RegisterWaitForSingleObject. This
' allows the wait to be terminated when the object has
' been signaled once (see WaitProc).
ti.Handle = ThreadPool.RegisterWaitForSingleObject( _
ev, _
New WaitOrTimerCallback(AddressOf WaitProc), _
ti, _
1000, _
false _
)
' The main thread waits about three seconds, to demonstrate
' the time-outs on the queued task, and then signals.
Thread.Sleep(3100)
Console.WriteLine("Main thread signals.")
ev.Set()
' The main thread sleeps, which should give the callback
' method time to execute. If you comment out this line, the
' program usually ends before the ThreadPool thread can execute.
Thread.Sleep(1000)
' If you start a thread yourself, you can wait for it to end
' by calling Thread.Join. This option is not available with
' thread pool threads.
End Sub
' The callback method executes when the registered wait times out,
' or when the WaitHandle (in this case AutoResetEvent) is signaled.
' WaitProc unregisters the WaitHandle the first time the event is
' signaled.
Public Shared Sub WaitProc(state As Object, timedOut As Boolean)
' The state object must be cast to the correct type, because the
' signature of the WaitOrTimerCallback delegate specifies type
' Object.
Dim ti As TaskInfo = CType(state, TaskInfo)
Dim cause As String = "TIMED OUT"
If Not timedOut Then
cause = "SIGNALED"
' If the callback method executes because the WaitHandle is
' signaled, stop future execution of the callback method
' by unregistering the WaitHandle.
If Not ti.Handle Is Nothing Then
ti.Handle.Unregister(Nothing)
End If
End If
Console.WriteLine("WaitProc( {0} ) executes on thread {1}; cause = {2}.", _
ti.OtherInfo, _
Thread.CurrentThread.GetHashCode().ToString(), _
cause _
)
End Sub
End Class
Yöntemler
| Name | Description |
|---|---|
| CreateObjRef(Type) |
Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur. (Devralındığı yer: MarshalByRefObject) |
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| Finalize() |
Bir nesnenin, atık toplama tarafından geri kazanılmadan önce kaynakları boşaltmaya ve diğer temizleme işlemlerini gerçekleştirmeye çalışmasına izin verir. |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetLifetimeService() |
Geçersiz.
Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır. (Devralındığı yer: MarshalByRefObject) |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| InitializeLifetimeService() |
Geçersiz.
Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır. (Devralındığı yer: MarshalByRefObject) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| MemberwiseClone(Boolean) |
Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur. (Devralındığı yer: MarshalByRefObject) |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |
| Unregister(WaitHandle) |
yöntemi tarafından verilen kayıtlı bekleme işlemini iptal eder RegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) . |
Şunlara uygulanır
İş Parçacığı Güvenliği
Bu tür iş parçacığı güvenlidir.