与某设备通讯,其开发包中有上百个不同函数(参数类型及个数均不同),每个函数调用时都可能遇到设备忙,于是就需要反复重试。在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
}