Вы можете решить эту проблему, используя BackgroundWorker
MSDN .
Примечание : Даже при использовании этого решения ваша форма будет зависать некоторое время. Поскольку у вас есть более 5000 элементов для привязки к списку, которые заблокируют ваш поток пользовательского интерфейса , следовательно, winform будет зависать. Но ваш listview.HeaderStyle
будет изменен.
Попробуйте это
- При нажатии кнопки вы напрямую изменяете свойство
listview.HeaderStyle
на ColumnHeaderStyle.Nonclickable
. Затем позвоните RunWorkerAsync
из BackgroundWorker
.
- В обработчике событий
DoWork
вы выполняете обработку и после этого привязываете данные к представлению списка. Для этого вам нужно добавить следующий класс расширения в ваш проект.
Класс расширения
public static class ControlExtensions
{
public static void Invoke(this Control control, Action action)
{
if (control.InvokeRequired) control.Invoke(new MethodInvoker(action), null);
else action.Invoke();
}
}
С его помощью вы можете привязать данные к списку
listview.Invoke(() => ( listview.DataSource = dataSource; });
Надеюсь, это работает для вас.