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;
}
从后台线程调用UI函数是危险的。所以你应该等待分配combobox1.DataSource直到RunWorkerCompleted事件。 DoWork在后台线程的上下文中调用。 RunWorkerCompleted将在原始UI线程上调用。 – 2010-07-26 13:47:44
这是正确的。我只是想说明你可以在后台线程中做什么,而不会过分详细地讨论组件的用法。 :) – rebelliard 2010-07-26 14:33:47
Thx为您提供帮助! – user402183 2010-07-26 15:29:55