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