Я запускаю процесс в отдельном потоке, чтобы облегчить параллелизм и плавный пользовательский интерфейс, вызывая
private void ThreadedTestConnection(SqlConnection conn, bool bShowErrMsg)
{
Task<bool> asyncTestConn = Task.Factory.StartNew<bool>
(() => TestConnection(conn, bShowErrMsg));
return asyncTestConn.Result;
asyncTestConn.Dispose();
}
из потока пользовательского интерфейса.Однако «ожидание», вызванное return asyncTestConn
, останавливает поток UI, возвращаемый обратно в GUI.Я придумал следующее исправление.От события, запущенного из моего графического интерфейса (не включая try
/ catch
блоки)
private void SomeClick_Event(object sender, EventArgs e)
{
Task testConnection = Task.Factory.StartNew
(() => UtilsDB.ThreadedTestConnection(mainConn, true));
}
Это работает.Таким образом, он сразу возвращает управление графическому интерфейсу во время выполнения теста в отдельном фоновом потоке.Я очень глупый мальчик в этом, или это хорошо?
Примечание: Это отдельный вопрос, но связанный с этим Я не получил удовлетворительного ответа.