Code Bye

怎么样实现不同操作的同一流程?(相似C++的宏)

与某设备通讯,其开发包中有上百个不同函数(参数类型及个数均不同),每个函数调用时都可能遇到设备忙,于是就需要反复重试。在C++里,本人定义了下面几个宏:
#define RETRY_COUNT		10
#define RETRY_INTERVAL	30
#define RETRY(err, func) \
	do { \
		int __nRetry; \
		\
		for(__nRetry = 0; __nRetry < RETRY_COUNT; __nRetry++) { \
			err = func; \
			if(err != ERR_DEVICE_BUSY) break; \
			::Sleep(RETRY_INTERVAL); \
		} \
	} while(0)

于是调用的时候就是这样的:

int nErr;
RETRY(nErr, DeviceFunc001(Param1, Param2));
if(nErr != ERR_OK) ....
RETRY(nErr, DeviceFunc002(Param3));
if(nErr != ERR_OK) ....
RETRY(nErr, DeviceFunc003(Param4, Param5, Param6));
if(nErr != ERR_OK) ....
......

现在本人需要把代码移植到C#中,怎么样才能实现?

解决方案

40

可以参考这个
private void Retry(Delegate dele, params object[] parameters)
{
    //todo:something
    dele.Method.Invoke(this, parameters);
    //todo:something
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怎么样实现不同操作的同一流程?(相似C++的宏)