Я новичок в темах и нуждаюсь в помощи. У меня есть приложение для ввода данных, которое занимает непомерное количество времени, чтобы вставить новую запись (то есть 50-75 секунд). Поэтому я решил отправить инструкцию вставки через ThreadPool и позволить пользователю начать ввод данных для записи во время той вставки, которая возвращает новый идентификатор записи во время выполнения этой вставки. Моя проблема в том, что пользователь может нажать «Сохранить», прежде чем новый идентификатор возвращается из этой вставки.
Я попытался вставить булеву переменную, для которой было установлено значение true через событие из этого потока, когда его можно безопасно сохранить. Затем я вставил
while (safeToSave == false)
{
Thread.Sleep(200)
}
Я думаю, что это плохая идея. Если я запустил метод сохранения до того, как этот протектор вернется, он застрянет.
Итак, мои вопросы:
- Есть ли лучший способ сделать это?
- Что я здесь не так делаю?
Спасибо за любую помощь.
Дуг
Изменить для получения дополнительной информации:
Он выполняет вставку в очень большую (приближаясь к максимальному размеру) базу данных FoxPro. Файл содержит около 200 полей и почти столько же индексов.
И прежде чем вы спросите, нет, я не могу изменить его структуру, как это было здесь раньше, и есть тонна унаследованного кода. Первая проблема заключается в том, что для получения нового идентификатора я должен сначала найти max (id) в таблице, затем увеличить его и проверить его. Это занимает около 45 секунд. Тогда первая вставка - это просто вставка этого нового идентификатора и поля ввода. Эта таблица не может / не может быть помещена в DBC, что исключает автоматическую генерацию идентификаторов и т. П.
@joshua.ewer
У вас правильный процесс, и я думаю, что на короткое время я просто отключу кнопку сохранения, но я буду изучать вашу идею передать его в очередь. У вас есть какие-либо ссылки на MSMQ, на которые мне следует взглянуть?