工作是很好的,可是发生了一件事。就是这个Form放置了一段时间后再操作,会有异常。
跟踪进去一看,发现是取formLogin的属性是出错,说是超时一类的。一开始以为是因为调用Web services的缘故,做了很多工作,还是徒然。
后来开始怀疑到AppDomain, 理解如下:
FormLogin是在MyDomain内创建的实例
那么formLogin在默认域内的实例实际上是MyDomain内实例的一个proxy
跟踪看到,果然是一个System.Runtime.Remoting.Proxies.__TransparentProxy对象
就想了一个土招
就是
在ShowDialog之前,得到租约,然后把这个租约传到FormLogin中,在FormLogin加一个Timer,检测到快超时的时候,就Renew租约。
System.Runtime.Remoting.Lifetime.ILease lease = (formLogin as MarshalByRefObject).InitializeLifetimeService() as System.Runtime.Remoting.Lifetime.ILease;
formLogin.Lease = lease;
本以为会有问题,可是居然成了。不过心里还是有些忐忑不安的。