程序中有单实例的实现方式,在窗口关闭重新打开后发生错误,提示错误:无法访问名为"XYZ"的已处置对象。
此问题原因已找到,因为对象已标记为释放但是还未释放,致使访问的条件不成立;参考文件如下:
http://topic.csdn.net/t/20051224/15/4479124.html修改判断条件if (instance == null)为if (instance == null || instance.IsDisposed)后问题解决了。但是又发现另一个没办法解决的问题:
有一个单实例对象A可以被另外两个对象X,Y访问到,在X访问时发现其已标记为释放所以生成了一个新对象,当Y访问时其已存在所以没有再次生成新对象,但是当Y访问该单实例对象时仍然得到一个错误:无法访问名为"XYZ"的已处置对象,X访问该单实例对象时正常。
请假高手这是什么原因?这个问题应该怎么解决?
此问题原因已找到,因为对象已标记为释放但是还未释放,致使访问的条件不成立;参考文件如下:
http://topic.csdn.net/t/20051224/15/4479124.html修改判断条件if (instance == null)为if (instance == null || instance.IsDisposed)后问题解决了。但是又发现另一个没办法解决的问题:
有一个单实例对象A可以被另外两个对象X,Y访问到,在X访问时发现其已标记为释放所以生成了一个新对象,当Y访问时其已存在所以没有再次生成新对象,但是当Y访问该单实例对象时仍然得到一个错误:无法访问名为"XYZ"的已处置对象,X访问该单实例对象时正常。
请假高手这是什么原因?这个问题应该怎么解决?
实际上我没有直接调用Close或Dispose的方法,我只是将它们从父控件上清理出去而已Controls.Clear();
另外类X,Y也是单实例模式;说了这么多,好像我使用单实例是错误的,自定义控件作为控件的话,我还没见过将一个窗口上的控件移动到另一个窗口上这样的做法!!我想这里我应该去修改一下。另外我还想知道我遇到的是什么问题!?X,Y都是通过类A访问它的静态属性,为什么一个能访问到,另一个访问不到哪?
public class MyStaticClass
{
private static MyStaticClass Instance;
private MyStaticClass() //普通构造器。定义成私有的。
{
}
public static MyStaticClass GetInstance()
{
if (Instance == null)
{
Instance = new MyStaticClass();
}
return Instance;
}
}
public static MyStaticClass GetInstance()
{
System.Threading.Monitor.Enter(Instance)
if (Instance == null)
{
Instance = new MyStaticClass();
}
System.Threading.Monitor.Exit(Instance)
return Instance;
}
我已经想办法绕过此问题;
noky(孤狼傲血)的方法还没有去试验。