nhibernate,异步加载

nhibernate,异步加载,nhibernate,asynchronous,Nhibernate,Asynchronous,我有一个关于冬眠的问题。我在应用程序中使用不同的控件(treeview、combobox等)。我通过nhibernate获取这些控件的内容。问题是,获取数据需要很多时间。Drung这次窗体被冻结 我想在另一个线程中加载数据。但我不知道该把线放在哪里。我是新加入hibernate的,也许你对此有更多的经验。这不是一个真正的NHibernate问题,而是一个.NET Windows窗体线程问题。无论如何,在Forms环境中,在后台线程上加载所有NHibernate的最简单方法是使用 private

我有一个关于冬眠的问题。我在应用程序中使用不同的控件(treeview、combobox等)。我通过nhibernate获取这些控件的内容。问题是,获取数据需要很多时间。Drung这次窗体被冻结


我想在另一个线程中加载数据。但我不知道该把线放在哪里。我是新加入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。这是正确的。我只是想说明您可以在后台线程中做些什么,而不会对组件的使用过于冗长。:)