У меня есть приложение фреймворка сущности С#. Я пытаюсь запустить хранимую процедуру из кода (без проблем). его длительный ход, около 30 минут. Я записываю журнал каждой транзакции в таблицу SQL по мере прохождения процесса. Я ищу, чтобы начать процедуру из приложения, но затем показать последние 10 записей журнала на экране, может быть, запрос каждые 10 секунд. это покажет прогресс.
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
Task.Run(() => _serviceProduct.RefreshAllAsync());
_cvsLog = (CollectionViewSource)(FindResource("cvsLog"));
var dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = TimeSpan.FromSeconds(10);
dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
_cvsLog.Source = _serviceProduct.GetRefreshLog();
}
Я изменил код, чтобы упростить. Поток блокирует процесс dispatcherTime_Tick. Похоже, что хранимая процедура не работает.
Здесь вызывается служба.
public ObservableCollection<RefreshLog> GetRefreshLog()
{
using (var db = new HiggidyPiesEntities())
{
var recs = (from x in db.RefreshLogs orderby x.LG_ID descending select x).Take(30);
var obs = new ObservableCollection<RefreshLog>(recs);
return obs;
}
}
Я был на рабочем пути работника и task.run, но процедура продолжает блокировать поток.
Я даже подумал о том, чтобы инициировать SQL-задание из кода, а затем отслеживать журнал после этого с помощью вызовов в базе данных. Может быть, услуга-брокер может быть выбор?
любые мысли о том, с какой дорогой я должен пойти с этим типом проблемы? заранее спасибо Скотт