您的位置:首页 > 大数据 > 人工智能

Wake WaitHandle AsycProcessor AutoResetEvent

2010-12-09 03:13 183 查看
namespace Microshaoft
{
using System;
using System.Threading;
public class WakeProcessor<TData>
{
private delegate void ProcessCaller(AutoResetEvent wait, TData data);
public delegate void WaitEventHandler(WakeProcessor<TData> sender, TData data);
public event WaitEventHandler OnWaitOneTimeout;
public event WaitEventHandler OnWaitOneWake;
public event WaitEventHandler OnWaitComplete;
private int _waitOneTimeoutSeconds = 0;
private int _waitTimeoutMinutes = 0;
public WakeProcessor
(
AutoResetEvent waitHandle
, int waitOneTimeoutSeconds
, int waitTimeoutMinutes
, TData data
)
{
BeginWaiting
(
waitHandle
, waitOneTimeoutSeconds
, waitTimeoutMinutes
, data
);
}
public void BeginWaiting
(
AutoResetEvent waitHandle
, int waitOneTimeoutSeconds
, int waitTimeoutMinutes
, TData data
)
{
_waitOneTimeoutSeconds = waitOneTimeoutSeconds;
_waitTimeoutMinutes = waitTimeoutMinutes;
ProcessCaller handler = new ProcessCaller(Process);
//AsyncCallback callback = new AsyncCallback(ProcessedCallback);
//IAsyncResult result =
handler.BeginInvoke(waitHandle, data , null, null);
}
private void Process(AutoResetEvent wait, TData data)
{
DateTime beginTime = DateTime.Now;
while (DateTime.Now.Subtract(beginTime).TotalSeconds <= _waitTimeoutMinutes * 60)
{
bool r = wait.WaitOne(_waitOneTimeoutSeconds * 1000);
if (r)
{
if (OnWaitOneWake != null)
{
OnWaitOneWake(this, data);
}
}
else
{
if (OnWaitOneTimeout != null)
{
OnWaitOneTimeout(this, data);
}
}
//if (r)
//{
//    break;
//}
}
//if (!r)
{
if (OnWaitComplete != null)
{
OnWaitComplete(this, data);
}
}
}
private void ProcessedCallback(IAsyncResult result)
{
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: