nhibernate,异步加载

问题描述:

我有一个关于休眠的问题。我在我的应用程序中使用了不同的控件(treeview,combobox,...)。我通过nhibernate获得这些控件的内容。问题是,获取数据需要很长时间。这次Drung表格被冻结。nhibernate,异步加载

我想在另一个线程中加载数据。但我不知道该把这个线索放在哪里。我是hibernate的新手,也许你有更多的经验。

这不是一个真正的NHibernate问题,而是一个.NET Windows窗体的线程化。无论如何,在Forms环境中,在后台线程上加载所有NHibernate的最简单方法是使用BackgroundWorker component

private void LoadData(object sender, EventArgs e) 
{ 
    // This event fires whatever's in DoWork() on a separate thread. 
    backgroundWorker1.RunWorkerAsync(); 

    // Things to do asynchronous operation. 
    timer1.Start(); 
} 

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // NHibernate loading goes here... 
    var employees = Session.CreateCriteria<Employee>(); 
    combobox1.DataSource = employees; 
} 
+2

从后台线程调用UI函数是危险的。所以你应该等待分配combobox1.DataSource直到RunWorkerCompleted事件。 DoWork在后台线程的上下文中调用。 RunWorkerCompleted将在原始UI线程上调用。 – 2010-07-26 13:47:44

+0

这是正确的。我只是想说明你可以在后台线程中做什么,而不会过分详细地讨论组件的用法。 :) – rebelliard 2010-07-26 14:33:47

+0

Thx为您提供帮助! – user402183 2010-07-26 15:29:55