Старый пост наверняка, но я просто использую GUID.
Items = Items.OrderBy(o => Guid.NewGuid().ToString()).ToList();
GUID всегда уникален, и поскольку он регенерируется каждый раз, когда результат изменяется каждый раз.
Можно создать компоненты COM + с помощью Системы. EnterpriseServices. ServicedComponent. Следовательно, Вы будете мочь создать out-of-proc и в - proc (клиент) активация компонента, а также все преимущества COM + объединения, дистанционной работы, работать как сервис окон и т.д.
Почему Вы не можете загрузить время выполнения .NET в Вас пространство процесса? Возможно разместить время выполнения .NET и вызов в .NET с помощью COM.
Здесь мы можем считать, что это возможно, но exe будет загружен как библиотека и не запущен в своем собственном процессе как exe. Я не знаю, является ли это проблемой для Вас? Это также содержит некоторые возможные решения, если Вы действительно хотите заставить его действовать как реальное из процесса com сервер. Но возможно использование другого способа предает коммуникацию процесса земле, лучше. Как.Net Remoting.
Я не могу рекомендовать это как путь, но Вы могли создать ОБЕРТКУ ДЛЯ COM-ВЫЗОВОВ для своей библиотеки C#, затем создать проект VB6 ActiveX exe, который делегирует вызовы к Вашей библиотеке C#.