可取消在.NET中排序?

DxC*_*xCK 3 .net c# sorting user-interface

我在VirtualMode中使用ListView来显示非常多的行,数百万行.存储在通用列表中的行的数据.

现在我想实现一个排序功能,它将由一些Comparer对List进行排序.

问题是,目前,平均单一排序大约需要30秒,在此期间,用户无法对ListView执行任何操作,必须等到结束.

并非每个用户都会接受等待那么长时间,大多数用户会取消排序,如果他们可以,我想允许该取消功能.不幸的是,内置的List.Sort无法取消,也无法取消Array.Sort.

现在排序发生在单独的线程上,所以我可以使用Thread.Abort,但它可能会导致List损坏,对我来说是不可接受的.

除了自己重新实现整个Sort算法之外,我能做些什么吗?

谢谢.

Sim*_*onJ 5

复制列表,在线程中对副本进行排序,然后替换原始列表(如果排序完成而不会中断).

但是如果可能的话,我会选择Martinho的建议 - 在应用程序中开始使用数百万行感觉对我来说是错误的.数据库可以在数据到达之前对数据进行过滤和排序.