先上代码:见下图:
经过多次验证,发现在SCAN的第一个参数中报标题这个异常。这个异常的诡异之处在于:这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。恳请各位大仙帮我指点一下。PS: 是不是因为rsd继承了MarshalByRefObject,而remMonitor也继承了MarshalByRefObject
所以rsd调用remMonitor的时候就出现错了呢?
如果是这样的话,为何我的主程序就没错误?
经过多次验证,发现在SCAN的第一个参数中报标题这个异常。这个异常的诡异之处在于:这段代码放在我的主程序中是没有问题的,现在截图的这个是通过测试框架调用的,就发生异常了。
通过对比两边的参数 remMonitor
发现是一模一样的。恳请各位大仙帮我指点一下。PS: 是不是因为rsd继承了MarshalByRefObject,而remMonitor也继承了MarshalByRefObject
所以rsd调用remMonitor的时候就出现错了呢?
如果是这样的话,为何我的主程序就没错误?
remMonitor的定义代码贴出来看看?
三张图片是三个不同的类,放在一起不好分辨 呵呵
仔细看下 声明在第三张,定义在第一张。另:
那个(IProgressStatus)是我另外加的,本身其实是没有的。
见它下面那行代码。
就是因为下面的那个报这个错误,所以我才加上这个(IProgressStatus)看看是否是它的问题。
结果不是 呵呵 。
是指正常程序中 和 我这个测试程序中 的这个变量 是 一模一样。
强调一模一样是为了排除这个变量本身的错误 呵呵
[/Quote]
什么意思?不要这么惜字如金啊,我不是很明白你说的意思?
你是说(IProcess)那个转换吗?
如果是,请看它的下一行,没有那个转换 还是报错,
结果还是错误的。
这不是递归调用。
这不是递归调用。
这个替代掉 RemoteProgessStatus remMonitor = new RemoteProgessStatus(monitor)
看看会不会报错
所以单纯的将其定义为IProgressStatus 会报错。
我刚试过,的确报错,无法转化。
IProgressStatus remMonitor = new RemoteProgessStatus(monitor)
这样实例化就报错的话,感觉比较迷茫了。一般来说只要实现了接口,那么这个对象本身就能直接用接口实例化出来
public interface IType
{
bool InsertType(TypeInfo type);
bool UpdateType(TypeInfo type);
bool DeleteType(int typeid);
}
public class User:MarshalByRefObject,IType
{
public void test(IType type)
{}
public bool InsertType(TypeInfo type)
{
return false;
}
public bool UpdateType(TypeInfo type)
{
return false;
}
public bool DeleteType(int typeid)
{
return false;
}
}public class Article
{
IType typeuser = new User();
User user = new User();
public Article()
{
user.test(typeuser);
}
}
这样的调用编译和debug跑起来都不会出问题
Scan(RemoteProgessStatus remMonitor,.....)
Iprogressstatus在哪儿定义的?
你的类哪个方法实现了这个接口定义?
我没有看到呢?
Scan()第一个参数不要用IProgressStatus 或 RemoteProgessStatus 对象,你随便从项目里拿个对象出来,再上面实例化后扔进去看,这样不会出错了吧
不报错的话只能证明你class RemoteProgessStatus 在某个地方存在问题,或者是RemoteSetupDomain 里Scan()方法的参数你设置的不对
其实最奇怪的问题是:
我主程序调用到这里的时候就没有问题,
我现在正在用nunit写单元测试,这个是SETUP中必须要走的步骤,它涉及了一些初始化工作。
上下文跟主程序绝无二异,崩溃啊~
你的RemoteProgessStatus 没有实现任何IProgressStatus里面的方法呀?
这样类型转换怎么不出错呢?
因为道理很简单,如果不是微软错了,那么你的假设退出来道理就推不走了,那么只有一种更可能,就是你的假设错了。这是我调试程序的经验。其次,如果故障确实是不能传入对象到IProgressStatus变量里面去,那么只有一种可能,就是你这个对象定义有问题,肯定是实现这个接口的环节出了问题,如果正确实现了接口,这样传送肯定是不会出问题的,虽然你认为你没有问题,但是你这个假设必须抛弃。仔细检查。最后,如果真的是主程序OK,Unit测试不行。拿肯定两个环境是不一样,这点不用质疑了,否则不可能出现这个问题。
因为你给的信息太少,都是按照你的假设推理,显然肯定走入死胡同的,因为按照你的假设如果能推走,你就不会发这个问题贴了。所以,你的假设一定有不是你想象的地方。这样的问题经常遇到,但是根据经验,最后问题解决之后发现99%都是当初的假设错误。毕竟微软BUG的可能性还是他太小了。