Если мне нужно сгенерировать довольно большой набор данных с помощью LINQ, и это может занять некоторое время (скажем, несколько секунд), и мне нужно (хотелось бы) создать обратную связь для использования в отношении% выполненного возраста, есть ли / предпочтительный способ сделать это?
Например, скажем, у меня есть список A с 1000 легковыми автомобилями и список B с 1000 грузовыми автомобилями, и я хочу выбрать все возможные заказанные пары (легковые и грузовые автомобили), где car.color == truck.color ссылаются на это:
var pairs = from car in A
from truck in B
where car.color==truck.color
select new {car, truck};
Теперь в какой-то момент это будет оцениваться как набор вложенных циклов foreach. Я хотел бы иметь возможность сообщать% 'age complete, как он есть, и в идеале обновлять индикатор выполнения или что-то в этом роде.
РЕДАКТИРОВАТЬ: Сразу после запроса я сохраняю результат в переменной-члене в виде списка, подобного этому (который заставляет выполнить запрос):
mPairs = pairs.ToList();
Я делаю это, потому что я выполняю это в фоновом рабочем потоке, поскольку я не хочу, чтобы поток пользовательского интерфейса зависал, поскольку он оценивает выражение LINQ по требованию в потоке пользовательского интерфейса (это в Silverlight BTW). Вот почему я хотел бы сообщить о прогрессе. UX в основном это:
- Пользователь перетаскивает элемент в рабочую область
- Затем движок запускает фоновый поток, чтобы определить (многие) возможности подключения ко всем остальным элементам в рабочей области.
- Во время вычисления движка пользовательский интерфейс не позволяет новым соединениям И сообщает о ходе выполнения, чтобы указать, когда новый элемент будет «подключаемым» к другим элементам (все возможные пути подключения, которые еще не используются, были определены через LINQ).
- Когда механизм завершает вычисление (запрос), элемент подключается в пользовательском интерфейсе, и возможные пути подключения сохраняются в локальной переменной для будущего использования (например, когда пользователь щелкает, чтобы подключить элемент, все возможные пути будут подсвечивается на основе того, что было рассчитано при добавлении)
(аналогичный процесс должен произойти при удалении элемента)