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);
}
}
}
转载于:https://www.cnblogs.com/daixingqing/p/4429346.html
相关资源:C#异步完成文件夹和文件复制