2013-05-22 45 views
0

我在這裏有一個桌面應用程序ListBox,它將接受超過10,000條記錄(目錄及其子目錄內的文件)。當我將其DataSourceDataTable分配的數量大於50,000時,即使它位於BackgroundWorkerDoWork以內,也會使UI掛起,因此也掛起了我的ProgressBar,這表明數據在ListBox中的分配進度。ListBox數據源指定

我也使用方法here來避免跨線程,同時分配它的DisplayMemberValueMember但仍然掛起。

下面的代碼:

private void bgWorkerForLstBox1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    string viewPath = string.Empty; 

    if (radFullPath.Checked) 
     viewPath = "fullPath"; 
    else if (radShortPath.Checked) 
     viewPath = "truncatedPath"; 
    else 
     viewPath = "fileName"; 

    if (dt1 != null) 
     if (dt1.Rows.Count > 0) 
      SetListBox1Props(viewPath, "fullPath"); 
} 

delegate void SetListBox1PropsCallback(string DisplayMember, string ValueMember); 

private void SetListBox1Props(string DisplayMember, string ValueMember) 
{ 
    if (this.lstBox1.InvokeRequired) 
    { 
     SetListBox1PropsCallback d = new SetListBox1PropsCallback(SetListBox1Props); 
     this.Invoke(d, new object[] { DisplayMember, ValueMember }); 
    } 
    else 
    { 
     this.lstBox1.DataSource = dt1; 
     this.lstBox1.DisplayMember = DisplayMember; 
     this.lstBox1.ValueMember = ValueMember; 
    } 
} 
+2

你真的想顯示'50,000'記錄,你不能實現分頁嗎? – Habib

+0

這是一個桌面應用程序。如果這會有所幫助,我該如何實現像GridView一樣的分頁? –

+0

你爲什麼要進行listbox控制,綁定這樣大小的數據會減慢應用程序的速度。所以使用分頁概念也使用Gridview/Repeater也在數據庫端實現分頁概念。 您正在使用哪個數據庫? –

回答

1

你要顯示的項目數是Windows太大。如果你需要這個,並且不想實現某種分頁,我會建議在VirtualMode中使用ListView控件。看到這個鏈接的更多信息:http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.virtualmode.aspx

+0

我在這裏發現了一些有用的東西http://www.vbaccelerator.com/home/NET/Code/Controls/ListBox_and_ComboBox/VListBox/VListBox.asp,但它只是一種錯誤... –