У меня есть настольное приложение с ListBox
, которое будет принимать записи (файлы внутри каталога и его подкаталогов) более 10 000. Когда я назначаю его DataSource
с этим DataTable
более чем на 50 000, он заставляет пользовательский интерфейс зависать, даже если он находится внутри DoWork
BackgroundWorker
, таким образом, висит также мой ProgressBar
, который указывает на прогресс в распределении данных в ListBox
.Назначение DataSource ListBox
Я также использовал метод here, чтобы избежать поперечной резьбы при назначении его DisplayMember
и ValueMember
, но все же он повесился.
Вот код:
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;
}
}
Вы действительно хотите показать записи «50 000», не можете ли вы реализовать пейджинг? – Habib
Это настольное приложение. Если это поможет, как я могу реализовать подкачку, как в «GridView»? –
Почему вы пошли на управление списком, привязка такого количества данных замедлит приложение. Поэтому использование концепции подкачки также использует Gridview/Repeater, также реализуя концепцию поискового вызова в стороне базы данных. В какой базе данных вы используете? –