using System;
using NUnit.Framework;
using System.Threading;
namespace InTheHand.Net.Tests{
public
#if ! FX1_1
static/*for now?*/
#endif
class Tests_Values
{
public const String NewLine = "\r\n";
internal static ArgumentOutOfRangeException new_ArgumentOutOfRangeException(string paramName, string message)
{
return new ArgumentOutOfRangeException(
#if ! FX1_1
paramName,
#endif
message);
}
}//class
class Delegate2
{
public static IAsyncResult BeginInvoke<TResult>(Func<TResult> dlgt, AsyncCallback asyncCallback, object state)
{
AsyncResult<TResult, Func<TResult>> ar = new AsyncResult<TResult, Func<TResult>>(asyncCallback, state, dlgt);
WaitCallback runnerDlgt = _RunnerResult<TResult>;
ThreadPool.QueueUserWorkItem(runnerDlgt, ar);
return ar;
}
public static TResult EndInvoke<TResult>(Func<TResult> dlgt, IAsyncResult ar)
{
AsyncResult<TResult, Func<TResult>> ar2 = (AsyncResult<TResult, Func<TResult>>)ar;
return ar2.EndInvoke();
}
public static IAsyncResult BeginInvoke(System.Threading.ThreadStart dlgt, AsyncCallback asyncCallback, object state)
{
AsyncNoResult<ThreadStart> ar = new AsyncNoResult<ThreadStart>(
asyncCallback, state, dlgt);
ThreadPool.QueueUserWorkItem(_RunnerNoResult, ar);
return ar;
}
public static void EndInvoke(System.Threading.ThreadStart dlgt, IAsyncResult ar)
{
AsyncNoResult<ThreadStart> ar2 = (AsyncNoResult<ThreadStart>)ar;
ar2.EndInvoke();
}
static void _RunnerNoResult(object state)
{
AsyncNoResult<ThreadStart> ar = (AsyncNoResult<ThreadStart>)state;
try {
ThreadStart dlgt = ar.BeginParameters;
dlgt();
ar.SetAsCompleted(null, false);
} catch (Exception ex) {
System.Reflection.TargetInvocationException tex
= new System.Reflection.TargetInvocationException(ex);
ar.SetAsCompleted(tex, false);
}
}
static void _RunnerResult<TResult>(object state)
{
AsyncResult<TResult, Func<TResult>> ar = (AsyncResult<TResult, Func<TResult>>)state;
try {
Func<TResult> dlgt = ar.BeginParameters;
TResult result = dlgt();
ar.SetAsCompleted(result, false);
} catch (Exception ex) {
System.Reflection.TargetInvocationException tex
= new System.Reflection.TargetInvocationException(ex);
ar.SetAsCompleted(tex, false);
}
}
}
delegate TResult Func<TResult>();
}
|