Справочная информация: я использовал для вызова хранимой процедуры во время загрузки формы. Однако, поскольку это привело к неоптимальному взаимодействию с пользовательским интерфейсом, я поместил свой вызов SP в отдельную задачу внутри события Shown
. Поскольку это, как правило, последнее событие в процессе отображения формы, оно дает гораздо лучший результат, чем вставка содержимого в событие загрузки формы. У меня есть:
private void MainForm_Shown(object sender, EventArgs e)
{
dbCheckTask = Task<bool>.Factory.StartNew(RunSPAndCheckStuff());
// both of below run on the GUI thread.
// if I print the thread ID in mycallback it is the GUI thread id
dbCheckTask.ContinueWith(mycallback());
// I also tried below. But obviously, that too runs on the GUI thread
mycallback(dbCheckTask.Result)
}
Поскольку они запускаются в потоке графического интерфейса, моя краска при запуске формы все еще не является ни мгновенной, ни гладкой. Как я могу завершить обратный вызов моей задачи в потоке без графического интерфейса, не прибегая к событиям? Всякий раз, когда задача завершается и если что-то не так, и только если что-то не так (результат bool вернул false), пользователь получает всплывающее окно с сообщением. До тех пор он мог делать другие вещи, не связанные с базой данных, в форме. Посоветуйте, пожалуйста, как я могу получить ответный вызов завершения задачи с результатом задачи в потоке без графического интерфейса пользователя. Спасибо