2013-08-20 33 views
0

关于下面的代码,在查找需要处理的对象时,using语句是否考虑了通过_ItemDataBound方法和Eval方法调用的对象?还是会尝试在附加事件之前进行处置,并且因为它们在生命周期的后期发生而被解雇?将使用语句与Repeater DataBinds和事件结合使用

换句话说,在所有的Evals和附加事件被调用之后,它是否仅处理datacontext,或者这会导致datacontext已被处置错误?

protected void Page_Load(object sender, EventArgs e) 
{ 
    using (EventManager manager = new EventManager()) 
    { 
     EventDates = manager.GetWhatsOn(Request.QueryString["category"]); 

     rptEventDates.DataSource = EventDates; 
     rptEventDates.DataBind(); 
    } 

...

public class EventManager : IDisposable 
{ 
    private MainDataContext db; 
    public EventManager() 
    { 
     db = new MainDataContext(); 
    } 

    ....other methods.... 

    public void Dispose() 
    { 
     db.Dispose(); 
    } 
} 

回答

1

关于下面的代码,并使用using语句,考虑到发现需要处置的对象时通过_ItemDataBound方法和eval方法叫做考虑的对象?

不,它根本没有“发现”对象 - 它只是处理声明第一部分中提到的对象。所以,你的代码是大致等同于:

EventManager manager = new EventManager(); 
try 
{ 
    EventDates = manager.GetWhatsOn(Request.QueryString["category"]); 

    rptEventDates.DataSource = EventDates; 
    rptEventDates.DataBind(); 
} 
finally 
{ 
    manager.Dispose(); 
} 

闲来无事将被安置,但EventManager本身肯定处置。

如果有什么需要资源而不是被处置,直到后来,你不应该使用using声明。

+0

感谢乔恩,有道理。所以真的代码是好的,但我不应该用using语句来包装repeater,而应该让垃圾回收做它的工作? –

+0

@ A-Bop:我不知道'EventManager'是什么或'GetWhatsOn'方法的作用,所以很难说你的代码是否可以。 –

+0

这很公平,我会尽力解释我所得到的 - 对不起,如果它不是很清楚。如果EventDates包含在中继器上的Eval()上调用的对象,但该对象来自EventManager中的datacontext - 是在Eval中处理的datacontext,因为它在using语句中? –

相关问题