Основной элемент управления - основная проблема.Просто требуется определенное время, чтобы изучить каждый элемент и решить, является ли он следующей выбранной строкой.
Вы можете сделать процесс перечисления примерно в два раза быстрее, отправив сообщения непосредственно в элемент управления:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
IntPtr h = this.listView1.Handle;
int j = 0;
int i = SendMessage(h, 0x100C, -1, 2);
while (i > -1) {
j++;
i = SendMessage(h, 0x100C, i, 2);
}
sw.Stop();
this.toolStripStatusLabel1.Text = String.Format("Timed: {0} items in {1}ms",
j, sw.ElapsedMilliseconds);
}
На моей машине это вдвое сократило время, необходимое для итерации выбранных элементов.Но этот процесс никогда не будет мгновенным.