using System;
using System.Threading;
using System.Runtime.Remoting.Messaging;
using System.Collections.Generic;
namespace PurchaseSystem.Component
{
public enum FlowType
{
CaiGou,
YingFu
}
public delegate void ProccessFlowDelegate(FlowType type);
public class Flow
{
private void AsyncFlow(FlowType type, Action<IAsyncResult, bool> callback = null)
{
ProccessFlowDelegate asyncFlow = AsyncFlowHandler;
IAsyncResult asyncResult = asyncFlow.BeginInvoke(type, AsyncFlowCallback, null);
ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle,
AsyncFlowCompleteCallback, new List<object>() { asyncResult, callback },
1800000, true);
}
private static void AsyncFlowCompleteCallback(object state, bool isTimeout)
{
List<object> stateList = state as List<object>;
IAsyncResult result = stateList[0] as IAsyncResult;
Action<IAsyncResult, bool> callback = stateList[1] as Action<IAsyncResult, bool>;
if (isTimeout)
{
if (!result.IsCompleted)
{
result.AsyncWaitHandle.Close();
}
}
callback(result, isTimeout);
}
private static void AsyncFlowCallback(IAsyncResult result)
{
ProccessFlowDelegate d = (ProccessFlowDelegate)((AsyncResult)result).AsyncDelegate;
d.EndInvoke(result);
}
private void AsyncFlowHandler(FlowType type)
{
if (type == FlowType.CaiGou)
{
}
else if (type == FlowType.YingFu)
{
}
}
public void CaiGouProccess(Guid purchaseApplyId)
{
AsyncFlow(FlowType.CaiGou, null);
}
}
}
using System;
using System.Threading;
using System.Collections.Generic;
using System.Runtime.Remoting.Messaging;
namespace PurchaseSystem.Component
{
public enum FlowProcessType
{
CaiGou,
YingFu
}
public delegate void FlowProcessDelegate(FlowProcessType type, params object[] parameters);
public class FlowProcess
{
private void AsyncFlowProcess(FlowProcessType type, params object[] parameters)
{
FlowProcessDelegate asyncMailNotice = AsyncFlowProcessHandler;
IAsyncResult asyncResult = asyncMailNotice.BeginInvoke(type, parameters, FlowProcessCallback, null);
ThreadPool.RegisterWaitForSingleObject(
asyncResult.AsyncWaitHandle,
FlowProcessCompleteCallback,
new List<object>() { asyncResult },
1800000,
true);
}
private void FlowProcessCallback(IAsyncResult result)
{
MailNoticeDelegate d = (MailNoticeDelegate)((AsyncResult)result).AsyncDelegate;
d.EndInvoke(result);
}
private void FlowProcessCompleteCallback(object state, bool isTimeout)
{
List<object> stateList = state as List<object>;
IAsyncResult result = stateList[0] as IAsyncResult;
if (isTimeout)
{
if (!result.IsCompleted)
{
result.AsyncWaitHandle.Close();
}
}
}
private void AsyncFlowProcessHandler(FlowProcessType type, params object[] parameters)
{
if (type == FlowProcessType.CaiGou)
{
}
}
public void PurchaseApplyApprovalMailNotice2(Guid purchaseApplyId)
{
AsyncFlowProcess(FlowProcessType.CaiGou, purchaseApplyId);
}
}
}