nhibernate,异步加载
我有一个关于冬眠的问题。我在应用程序中使用不同的控件(treeview、combobox等)。我通过nhibernate获取这些控件的内容。问题是,获取数据需要很多时间。Drung这次窗体被冻结nhibernate,异步加载,nhibernate,asynchronous,Nhibernate,Asynchronous,我有一个关于冬眠的问题。我在应用程序中使用不同的控件(treeview、combobox等)。我通过nhibernate获取这些控件的内容。问题是,获取数据需要很多时间。Drung这次窗体被冻结 我想在另一个线程中加载数据。但我不知道该把线放在哪里。我是新加入hibernate的,也许你对此有更多的经验。这不是一个真正的NHibernate问题,而是一个.NET Windows窗体线程问题。无论如何,在Forms环境中,在后台线程上加载所有NHibernate的最简单方法是使用 private
我想在另一个线程中加载数据。但我不知道该把线放在哪里。我是新加入hibernate的,也许你对此有更多的经验。这不是一个真正的NHibernate问题,而是一个.NET Windows窗体线程问题。无论如何,在Forms环境中,在后台线程上加载所有NHibernate的最简单方法是使用
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;
}
private void LoadData(对象发送方,事件参数e)
{
//此事件在单独的线程上激发DoWork()中的任何内容。
backgroundWorker1.RunWorkerAsync();
//异步操作要做的事情。
timer1.Start();
}
私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{
//NHibernate加载到这里。。。
var employees=Session.CreateCriteria();
combobox1.DataSource=员工;
}
从后台线程调用UI函数是危险的。因此,您可能应该等到RunWorkerCompleted事件发生后再分配combobox1.DataSource。在后台线程的上下文中调用DoWork。将在原始UI线程上调用RunWorkerCompleted。这是正确的。我只是想说明您可以在后台线程中做些什么,而不会对组件的使用过于冗长。:)