Index: trunk/Include/Classes/System/Threading/WaitHandle.ab
===================================================================
--- trunk/Include/Classes/System/Threading/WaitHandle.ab	(revision 407)
+++ trunk/Include/Classes/System/Threading/WaitHandle.ab	(revision 408)
@@ -29,11 +29,13 @@
 
 	' Methods
+	Virtual Sub WaitHandle()
+	End Sub
 
 	Virtual Sub ~WaitHandle()
-		Dispose()
+		This.Dispose()
 	End Sub
 
 	Virtual Sub Close()
-		Dispose()
+		This.Dispose()
 	End Sub
 
@@ -53,31 +55,40 @@
 	End Function
 
-'	Function WaitOne(timeout As TimeSpan, exitContext As BOOL) As BOOL
-/*
-	Static Function WaitAll(count As DWord, handles As *HANDLE) As BOOL
+	Function WaitOne(timeout As System.TimeSpan, exitContext As Boolean) As Boolean
+		Return WaitHandle.AfterWait(WaitForSingleObject(h, timeout.TotalMilliseconds() As DWord), 1)
+	End Function
+
+	Static Function WaitAll(count As DWord, handles As *HANDLE) As Boolean
 		Return WaitAll(count, handles, INFINITE, FALSE)
 	End Function
 
-	Static Function WaitAll(count As DWord, handles As *HANDLE, millisecondsTimeout As Long, exitContext As BOOL) As BOOL
+	Static Function WaitAll(count As DWord, handles As *HANDLE, millisecondsTimeout As Long, exitContext As Boolean) As Boolean
 		Return WaitHandle.AfterWait(WaitForMultipleObjects(count, handles, TRUE, millisecondsTimeout), count)
 	End Function
 
-'	Static Function WaitAll(timeout As TimeSpan, handles As *HANDLE, millisecondsTimeout As Long, exitContext As BOOL) As BOOL
+	Static Function WaitAll(count As DWord, handles As *HANDLE, timeout As System.TimeSpan, exitContext As Boolean) As Boolean
+		Return WaitHandle.AfterWait(WaitForMultipleObjects(count, handles, TRUE, timeout.TotalMilliseconds() As DWord), count)
+	End Function
 
-	Static Function WaitAny(count As DWord, handles As *HANDLE) As BOOL
+	Static Function WaitAny(count As DWord, handles As *HANDLE) As Boolean
 		Return WaitAny(count, handles, INFINITE, FALSE)
 	End Function
 
-	Static Function WaitAny(count As DWord, handles As *HANDLE, millisecondsTimeout As Long, exitContext As BOOL) As BOOL
+	Static Function WaitAny(count As DWord, handles As *HANDLE, millisecondsTimeout As Long, exitContext As Boolean) As Boolean
 		Return WaitHandle.AfterWait(WaitForMultipleObjects(count, handles, FALSE, millisecondsTimeout), count)
 	End Function
 
-'	Static Function WaitAny(timeout As TimeSpan, handles As *HANDLE, millisecondsTimeout As Long, exitContext As BOOL) As BOOL
-*/
+	Static Function WaitAny(count As DWord, handles As *HANDLE, timeout As System.TimeSpan, exitContext As Boolean) As Boolean
+		Return WaitHandle.AfterWait(WaitForMultipleObjects(count, handles, FALSE, timeout.TotalMilliseconds() As DWord), count)
+	End Function
+
 	Static Function SignalAndWait(toSignal As WaitHandle, toWaitOn As WaitHandle) As Boolean
 		Return SignalAndWait(toSignal, toWaitOn, INFINITE, FALSE)
 	End Function
 
-Public
+	Static Function SignalAndWait (toSignal As WaitHandle, toWaitOn As WaitHandle, timeout As System.TimeSpan, exitContext As Boolean) As Boolean
+		Return SignalAndWait(toSignal, toWaitOn, timeout.TotalMilliseconds() As Long, FALSE)
+	End Function
+
 	Static Function SignalAndWait(toSignal As WaitHandle, toWaitOn As WaitHandle, millisecondsTimeout As Long, exitContext As Boolean) As Boolean
 		Dim pSignalObjectAndWait = GetProcAddress(GetModuleHandle("Kernel32.dll"), "SignalObjectAndWait") As Detail.PFNSignalObjectAndWait
@@ -88,9 +99,8 @@
 	End Function
 
-'	Static Function SignalAndWait(ByRef toSignal As WaitHandle, ByRef toWaitOn As WaitHandle, timeout As TimeSpan, exitContext As BOOL) As BOOL
-
-' Protected
-	Sub WaitHandle()
-	End Sub
+Public
+	Function WaitTimeout() As Long
+		Return WAIT_TIMEOUT
+	End Function
 
 Protected
