2010-07-26 4 views
2

최대 절전 모드에 대한 질문이 있습니다. 내 응용 프로그램 (treeview, combobox, ...)에서 다른 컨트롤을 사용합니다. nhibernate를 통해 이러한 컨트롤에 대한 내용을 얻습니다. 문제는 데이터를 가져 오는 데 많은 시간이 걸린다는 것입니다. 이번에는 양식이 동결되었습니다.nhibernate, async loading

다른 스레드에서 데이터를로드하려고합니다. 하지만 그 스레드를 넣을 곳을 모르겠습니다. 나는 최대 절전 모드에서 새로운, 어쩌면 당신은 그것에 대해 더 많은 경험이 있습니다.

답변

2

이것은 실제로 NHibernate 문제가 아니라 .NET Windows Forms 스레딩 문제입니다. 어쨌든, 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 스레드에서 호출됩니다. –

+0

맞습니다. 배경 스레드에서 수행 할 수있는 작업을 설명하기 위해 구성 요소의 사용법을 지나치게 상세하게 설명하지 않았습니다. :) – rebelliard

+0

도와 주셔서 Thx! – user402183