private void UpdateTablesListAsync(object sender, DoWorkEventArgs e) { var builder = (DbConnectionStringBuilder)((object[])e.Argument)[0]; var database = (string)((object[])e.Argument)[1]; var discoveredDatabase = new DiscoveredServer(builder).ExpectDatabase(database); IDiscoveredDatabaseHelper databaseHelper = discoveredDatabase.Helper; _workerRefreshTablesToken = new CancellationTokenSource(); var syntaxHelper = discoveredDatabase.Server.GetQuerySyntaxHelper(); try { using (var con = discoveredDatabase.Server.GetConnection()) { var openTask = con.OpenAsync(_workerRefreshTablesToken.Token); openTask.Wait(_workerRefreshTablesToken.Token); List <DiscoveredTable> result = new List <DiscoveredTable>(); result.AddRange(databaseHelper.ListTables(discoveredDatabase, syntaxHelper, con, database, true)); result.AddRange(databaseHelper.ListTableValuedFunctions(discoveredDatabase, syntaxHelper, con, database)); _listTablesAsyncResult = result; } } catch (OperationCanceledException)//user cancels { _listTablesAsyncResult = new List <DiscoveredTable>(); } }