通过spring.net创建的winform对象被销毁后,第二次获得的无法使用

dinghun8leech 2011-07-11 04:49:59
问题rt:

具体现象:同样的代码,第一次创建时得到的Form对象可正常使用,当被Dispose()后,再次执行此段代码虽能获得Form实例,但是执行到frm.ShowDialog(this);出错,报“ObjectDisposedException,无法访问已释放的对象。对象名:“TestForm””。

猜测:是不是spring创建实例每次都是同一个实例?我可没有指定该实例的创建机制为单例呀。

贴代码:

Form f = Application.OpenForms["TestForm"];
if (f == null)
{
Form frm = ContextRegistry.GetContext().GetObject("TestForm") as Form;
frm.ShowDialog(this);
frm.Dispose();
}
else
{
f.Activate();
f.Focus();
}


<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
</sectionGroup>
</configSections>

<spring>

<context>
<resource uri="config://spring/objects"/>
</context>

<objects xmlns="http://www.springframework.net">

<object id="TestForm" type="Xxxxx.TestForm, Xxxxx">
</object>

</objects>
</spring>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>

...全文
66 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinghun8leech 2011-07-11
  • 打赏
  • 举报
回复
恩,感谢楼上两位。
已经下班了,明天上班接着试。
阿非 2011-07-11
  • 打赏
  • 举报
回复
frm.Dispose();
=》
frm.Close();
zzxap 2011-07-11
  • 打赏
  • 举报
回复

Form frm = ContextRegistry.GetContext().GetObject("TestForm") as Form;

开始循环

结束循环

frm.Dispose();

不要在循环里频繁定义
dinghun8leech 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuexiaodong2009 的回复:]
frm.Dispose();并不代表frm == null
加一句试试
f=null
[/Quote]
刚加了试试,还是老错误。
xuexiaodong2009 2011-07-11
  • 打赏
  • 举报
回复
frm.Dispose();并不代表frm == null

加一句试试
f=null

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧