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