Por lo que yo puedo decir, utilizando cualquiera de los métodos de .NET para seleccionar un gran número de elementos es mucho más lento que hacer una llamada directa PInvoke, pasando el mensaje LB_SETSEL (0x185) para el control, la una bandera que indica si desea Seleccionar (1) o Deseleccionar (0), así como el valor mágico (-1) que indica que el cambio debe aplicarse a todos los artículos.
[DllImport("user32.dll", EntryPoint = "SendMessage")]
internal static extern IntPtr SendMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam);
// Select All
SendMessage(listBox.Handle, 0x185, (IntPtr)1, (IntPtr)(-1));
// Unselect All
SendMessage(listBox.Handle, 0x185, (IntPtr)0, (IntPtr)(-1));
Esta debe ser la respuesta aceptada. –