У меня есть небольшое приложение, которое должно тестировать строки подключения SQL для нескольких подключений (каждое выполняется по одному). Для этого я временно установил ConnectionTimeout = 5
, чтобы избежать длительного ожидания, если соединение недействительно, и ConnectionTimeout = 0
(скажем, ждать вечно).
Во избежание зависания пользовательского интерфейса при попытке Open()
плохое соединение (даже при ConnectionTimeout = 5
ожидание SqlException
может увеличиться. до двадцати секунд), я хочу запустить тест в отдельном потоке, используя библиотеку параллельных задач (TPL). Итак, я выделяю свой новый поток следующим образом:
Task<bool> asyncTestConn = Task.Factory.StartNew<bool>
(() => TestConnection(conn, bShowErrMsg));
return asyncTestConn.Result;
Проблема в том, что он по-прежнему блокирует пользовательский интерфейс (очевидно), так как он ожидает результата, прежде чем вернуться к вызывающей стороне.Как разрешить коду возвращать управление пользовательскому интерфейсу (освобождая графический интерфейс) при получении конечного результата от асинхронной задачи
?
Кроме того, внутри Task
я могу законно выполнить MessageBox.Show("Some message")
? Это не работает для BackgroundWorkers
, и этот объединенный поток является фоновым потоком по умолчанию; но это не кажется проблемой. Спасибо за ваше время.